programing

날짜/시간을 삽입하는 동안 문자열에서 날짜 및/또는 시간을 변환할 때 변환에 실패했습니다.

mbctv 2023. 4. 6. 23:03
반응형

날짜/시간을 삽입하는 동안 문자열에서 날짜 및/또는 시간을 변환할 때 변환에 실패했습니다.

저는 다음과 같은 테이블을 작성하려고 했습니다.

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

반응형