날짜/시간을 삽입하는 동안 문자열에서 날짜 및/또는 시간을 변환할 때 변환에 실패했습니다.
저는 다음과 같은 테이블을 작성하려고 했습니다.
create table table1(date1 datetime,date2 datetime);
먼저 아래와 같은 값을 삽입해 보았습니다.
insert into table1 values('21-02-2012 6:10:00 PM','01-01-2001 12:00:00 AM');
"라고 하는 오류가 발생했습니다.
varchar를 datetime으로 변환할 수 없습니다.
그 후 스택오버플로우가 제안하는 투고 중 하나로 아래 포맷을 시도했습니다.
insert into table1 values(convert(datetime,'21-02-2012 6:10:00 PM',5)
,convert(datetime,'01-01-2001 12:00:00 AM',5));
하지만 여전히 오류가 발생하고 있습니다.
문자열에서 날짜 및/또는 시간을 변환할 때 변환에 실패했습니다.
좋은 의견이라도 있나?
SQL Server에서 지원되는 형식은 여러 가지가 있습니다. CAST 및 CONVERT에 대한 MSDN Books Online을 참조하십시오.이러한 형식의 대부분은, 사용하고 있는 설정에 의해서 다릅니다.따라서, 이러한 설정이 동작하는 경우도 있고, 동작하지 않는 경우도 있습니다.
이 문제를 해결하는 방법은 SQL Server에서 지원되는 ISO-8601 날짜 형식을 사용하는 것입니다. 이 형식은 SQL Server 언어 및 날짜 형식 설정에 관계없이 항상 작동합니다.
ISO-8601 형식은 SQL Server에서 지원되며 다음 두 가지 맛이 있습니다.
YYYYMMDD날짜만(시간 부분 없음); 여기 주의: 대시 없음! 매우 중요합니다!YYYY-MM-DD는 SQL Server의 날짜 형식 설정과 독립적이지 않으며 일부 상황에서는 작동하지 않습니다.
또는 다음과 같이 입력합니다.
YYYY-MM-DDTHH:MM:SS날짜 및 시간 - 여기 참고: 이 형식에는 대시(단, 생략 가능)가 있고 고정 형식이 있습니다.T을 구분하여 합니다.DATETIME.
이는 SQL Server 2000 이상에서 유효합니다.
따라서 특정 경우 - 다음 문자열을 사용합니다.
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
그러면 문제 없습니다(주의: 12시간 AM/PM 형식이 아닌 국제 24시간 형식을 사용해야 합니다).
또는 SQL Server 2008 이후를 사용하는 경우DATETIME2 데이터형(플레인 데이터형) )DATETIME 및 사용 인 ).INSERT 없이 할 수 . 제제!!!!!!! !!!!!! :-)DATETIME2변환이 훨씬 우수하고 까다롭지 않습니다.SQL Server 2008 시 2008 2008시시 / 시시시시시시시시시시시시시시 。
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
왜 이 모든 주제가 그렇게 까다롭고 다소 혼란스러운지 묻지 마세요. 바로 그런 식입니다. ,를 YYYYMMDDSQL Server 、 SQL Server 、 SQL Server 、SQL Server 。
SQL Server에서 변환이 실패하는 것은 사용된 날짜 또는 시간 형식이 아니라 단지 시스템에서 허용되지 않는 잘못된 데이터를 저장하려고 하기 때문입니다.
예를 들어:
Create Table MyTable (MyDate);
Insert Into MyTable(MyDate) Values ('2015-02-29');
SQL 서버에서 다음 오류가 발생합니다.
Conversion failed when converting date and/or time from character string.
이 오류의 이유는 단순히 연도(2015년)에는 해당 날짜(2월-29일)가 없기 때문입니다.
간단한 답변 - 5는 이탈리아어 "yyy", 105는 이탈리아어 "yyyy"입니다.그 때문에,
SELECT convert(datetime,'21-02-12 6:10:00 PM',5)
정상적으로 동작하지만
SELECT convert(datetime,'21-02-12 6:10:00 PM',105)
에러가 발생합니다.
저도 마찬가지예요.
SELECT convert(datetime,'21-02-2012 6:10:00 PM',5)
에러가 발생합니다.
SELECT convert(datetime,'21-02-2012 6:10:00 PM',105)
효과가 있습니다.
가능하면 문화별 날짜/시간 리터럴은 피해야 합니다.
날짜/시간을 리터럴로 제공하는 몇 가지 안전한 형식이 있습니다.
의 예2016-09-15 17:30:00
ODBC(실제 타입으로 즉시 처리되므로 마음에 드는 것)
{ts'2016-09-15 17:30:00'}--{d'2016-09-15'}· ★★{t'17:30:00'}한정-----------------------------
ISO8601(어디서나 최적)
'2016-09-15T17:30:00'.T★★★★★★★★★★★★★★★★★★!
구분되지 않음(숫자로 잘못 해석될 위험이 적음)
'20160915'--순수 날짜만
주의할 점:잘못된 날짜가 이상한 오류와 함께 나타나는 경향이 있습니다.
- 6월 31일이나 2월 30일은 없어...
이상한 변환 오류의 또 다른 이유: 실행 순서!
SQL-Server는 예상치 못한 실행 순서로 작업을 수행하는 것으로 잘 알려져 있습니다.서면 스테이트먼트는 변환이 어떤 유형 관련 액션이 발생하기 전에 이루어지는 것처럼 보이지만, 엔진은 변환을 나중에 수행하도록 결정합니다.
다음은 예를 들어 이를 설명하는 훌륭한 기사입니다.Rusano.com: "t-sql-sql-sql-sql-do-no-sql-sql-sql-sql-do-no-sql-sql-sql-s
날짜 형식을 아래와 같이 업데이트하십시오.
yyyy-MM-dd hh:MM:ss
그것은 나를 위해 문제를 해결하고 잘 작동한다.
시도해보니 효과가 있더군요
SELECT CONVERT(date, yourDate ,104)
가장 좋은 방법은 이 코드입니다.
"select * from [table_1] where date between convert(date,'" + dateTimePicker1.Text + "',105) and convert(date,'" + dateTimePicker2.Text + "',105)"
연결하려고 할 때 이 문제가 발생했습니다.getdate()엔바르카 필드에 삽입한 문자열에 넣을 수 있습니다.
그걸 피하기 위해 캐스팅을 좀 했어요.
INSERT INTO [SYSTEM_TABLE] ([SYSTEM_PROP_TAG],[SYSTEM_PROP_VAL]) VALUES
(
'EMAIL_HEADER',
'<h2>111 Any St.<br />Anywhere, ST 11111</h2><br />' +
CAST(CAST(getdate() AS datetime2) AS nvarchar) +
'<br /><br /><br />'
)
그건 소독된 예야.그 중요한 부분은 다음과 같습니다.
...' + CAST(CAST(getdate() AS datetime2) AS nvarchar) + '...
를 짜를를 cast cast cast cast cast cast cast cast cast cast cast로 .datetime2, as, asnvarchar연결할 수 있습니다.
입니다.datetime:
INSERT INTO time_data (ImportateDateTime) VALUES (CAST(CONVERT(datetimeoffset,'2019-09-13 22:06:26.527000') AS datetime))
출처: https://www.sqlservercurry.com/2010/04/convert-character-string-iso-date-to.html
이 오류는 날짜가 존재하지 않는 경우에도 표시됩니다(예: 날짜).'09-31-2021'존재하지 않습니다.9월은 30일이기 때문입니다).
convert(datetime2,((SUBSTRING( ISNULL(S2.FechaReal,e.ETA),7,4)+'-'+ SUBSTRING( ISNULL(S2.FechaReal,e.ETA),4,2)+'-'+ SUBSTRING( ISNULL(S2.FechaReal,e.ETA),1,2) + ' 12:00:00.127'))) as fecha,
SQL 서버에서 실제로 실행되는 datetime 형식은 다음과 같습니다.
yyyy-mm-dd hh:MM:ss
이거 드셔보세요.
SQL Server는 기본 언어로 영어가 설정되어 있는 경우 MM/DD/YYY 형식의 날짜를 예상합니다.여기에서는 datepicker 값을 sql2008 데이터베이스에 저장합니다.필드 유형은 datetime in database 입니다.dpdob은 날짜 선택자 이름입니다.
Dim test = dpdob.Text.Replace("-", "/")
Dim parts As String() = test.Split(New Char() {"/"c})
Dim firstPart As String = parts(0)
Dim thirdPart As String = parts(2)
Dim secondPart As String = parts(1)
Dim test1 = secondPart + "/" + firstPart + "/" + thirdPart
Dim dob = test1
이제 삽입 쿼리에 dob을 사용합니다.
이 코드를 사용할 수 있습니다.
select (Convert(Date, '2018-04-01'))
저는 이 방법이 효과가 있었습니다.
INSERT INTO [MyTable]
([ValidFrom]
,[ValidTo])
VALUES
('2020-01-27 14:54:11.000'
,'2023-01-27 14:52:50.000')
EF Core를 사용하는 경우 OnModelCreating을 사용해야 했습니다.
[ My Job Table ]의 [CreatedOn smaldatime]필드.
modelBuilder.Entity<Job>().Property(x => x.CreatedOn).HasColumnType("datetime")
web.config 파일에서 Culture를 영어로 설정합니다.
<globalization uiCulture="en-US" culture="en-US" />
예를 들어, 당신이 문화를 아랍어로 설정한다면, thime은 다음과 같이 될 것이다.
09/2017 02:16:57 »
에러가 표시됩니다.날짜/시간을 삽입하는 동안 문자열에서 날짜 및/또는 시간을 변환할 때 변환에 실패했습니다.
SQL 삽입 쿼리를 작성할 때 날짜를 작은 따옴표로 쓰고 슬래시를 날짜 형식(DD/MM/YYY)으로 다음과 같이 사용합니다.
insert into table_name (Emp_Id, Name, **DOB**) values
(01, 'Suresh Kumawat', **'22/03/2015'**);
다음 메시지도 받을 수 있습니다.
당신의 칼럼이varchar또는char와 함께'NULL'컬럼을 변환하려고 합니다.date.
언급URL : https://stackoverflow.com/questions/14119133/conversion-failed-when-converting-date-and-or-time-from-character-string-while-i
'programing' 카테고리의 다른 글
| SQL Server 동적 피벗 쿼리? (0) | 2023.04.06 |
|---|---|
| SQL Server Management Studio에서 컴포지트 키를 만드는 방법 (0) | 2023.04.06 |
| SQL Server DB의 모든 인덱스 및 인덱스 열 목록 (0) | 2023.04.06 |
| 2개의 SQL Server 데이터베이스(스케마 및 데이터)를 비교하기 위한 최적의 툴은 무엇입니까? (0) | 2023.04.06 |
| 테이블 추가 열 구문 변경 (0) | 2023.04.06 |
