복붙노트

[SQL] 날짜를 삽입하는 동안 문자열에서 날짜 및 / 또는 시간을 변환 할 때 변환 실패

SQL

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

나는 다음과 같이 테이블을 만들려고했다

create table table1(date1 datetime,date2 datetime);

먼저 I는 다음과 같이 값을 삽입 시도

insert into table1 values('21-02-2012 6:10:00 PM','01-01-2001 12:00:00 AM');

그것은 오류 말을 주신

그럼, 우리의 유래가 제시 한 게시물의 하나로서 형식 아래 시도

insert into table1 values(convert(datetime,'21-02-2012 6:10:00 PM',5)
                          ,convert(datetime,'01-01-2001 12:00:00 AM',5));

하지만 여전히 오류 말이 무엇입니까

어떤 제안?

해결법

  1. ==============================

    1.이 SQL Server에서 지원하는 여러 형식은 - CAST 및 CONVERT에 MSDN 온라인 설명서를 참조하십시오. 따라서 이러한 설정이 몇 번을 작동 할 수 있습니다 - - 때로는되지 않은 형식의 대부분은 당신이 무슨 설정에 따라 달라집니다.

    이 SQL Server에서 지원하는 여러 형식은 - CAST 및 CONVERT에 MSDN 온라인 설명서를 참조하십시오. 따라서 이러한 설정이 몇 번을 작동 할 수 있습니다 - - 때로는되지 않은 형식의 대부분은 당신이 무슨 설정에 따라 달라집니다.

    이 문제를 해결하는 방법은 SQL Server에서 지원됩니다 (약간 적응) ISO-8601 날짜 형식을 사용하는 것입니다 -이 형식은 항상 작동 -에 관계없이 SQL 서버 언어와 DATEFORMAT 설정.

    SQL Server에서 지원되는 ISO-8601 형식은 두 가지 유형이있다 :

    또는:

    이 SQL Server 2000 및 새로운 유효합니다.

    그래서 콘크리트의 경우 -이 문자열을 사용 :

    insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
    

    당신은 괜찮을 것 (주 : 당신이 국제 24 시간 형식보다는 12 시간 AM / 이것에 대한 PM 형식을 사용합니다).

    또한 : 당신은 SQL 서버 2008 이상에 있다면, 당신은 또한 문제없이 DATETIME2의 (대신 일반 DATETIME의) 데이터 유형과 현재 INSERT하는 것과 일을 사용할 수 있습니다! :-) DATETIME2이 훨씬 낫다과 전환에 훨씬 덜 까다 롭고 - 그리고 그것은 어쨌든 SQL Server 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  
    

    이 모든 항목이 너무 까다 롭고 다소 혼동 왜 안 함 - 그것이 단지 방법이. 그러나 YYYYMMDD 형식으로, 당신은 SQL Server의 버전과 언어와 SQL Server의 DATEFORMAT 설정에 대해 잘해야한다.

  2. ==============================

    2.SQL 서버에서 변환 그것은 당신이 시스템에 허용되지 않는 잘못된 데이터를 저장하기 위해 노력하고있다 단순히 때문입니다 때문에 사용되는 날짜 또는 시간 형식의 때때로하지 못합니다.

    SQL 서버에서 변환 그것은 당신이 시스템에 허용되지 않는 잘못된 데이터를 저장하기 위해 노력하고있다 단순히 때문입니다 때문에 사용되는 날짜 또는 시간 형식의 때때로하지 못합니다.

    예:

    MyTable 테이블 (MyDate가) 만들기;

    삽입]을 MyTable (MyDate가) 값 ( '2015년 2월 29일');

    SQL 서버는 다음과 같은 오류가 발생합니다 :

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

    이 오류의 원인은 단순히 더 년도에 같은 날짜 (2 월 29 일) (2015)가 없습니다.

  3. ==============================

    3.간단한 대답 - 5 이탈리아 "YY"이고 105은 "YYYY"이탈리아어. 따라서:

    간단한 대답 - 5 이탈리아 "YY"이고 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)
    

    작동합니다.

  4. ==============================

    4.때마다 문화 특정 날짜 / 시간 리터럴을 피해야 가능 하나.

    때마다 문화 특정 날짜 / 시간 리터럴을 피해야 가능 하나.

    문자 그대로의 날짜 / 시간을 제공하기 위해 몇 가지 보안 형식이 있습니다 :

    2016년 9월 15일 17시 30분 0초에 대한 모든 예

    SQL-Server는 잘 실행 한 순서대로 일이 예상되지 않았을 수 있습니다 해야할지된다. 변환과 같은 귀하의 성명의 외모 관련 행동이 발생하는 몇 가지 유형 전에 수행되지만 엔진은 결정 - 왜 지금 - 나중 단계에서 변환을 수행 할 수 있습니다.

    Rusano.com : 여기에 "T-SQL-기능 - 노 - 어 - 특정 주문 -의 - 실행을 의미합니까"와 관련된 질문은 여기에 예제와 함께이 문제를 설명하는 좋은 기사입니다.

  5. ==============================

    5.그냥 울부 짖는 소리 같은 날짜 형식을 업데이트

    그냥 울부 짖는 소리 같은 날짜 형식을 업데이트

    yyyy-MM-dd hh:MM:ss
    

    그것은 나를 위해 문제를 해결하고 그것을 잘 작동합니다

  6. ==============================

    6.가장 좋은 방법은이 코드

    가장 좋은 방법은이 코드

    "select * from [table_1] where date between convert(date,'" + dateTimePicker1.Text + "',105) and convert(date,'" + dateTimePicker2.Text + "',105)"
    
  7. ==============================

    7.

    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,
    
  8. ==============================

    8.이 시도하십시오.

    이 시도하십시오.

    영어 SQL2008 database.My 필드 형식으로 날짜 선택기 값을 저장하고 기본 language.Here로 설정되어있는 경우 SQL Server는 database.dpdob에서 날짜 시간 내 날짜 선택기 이름입니다, MM / DD / YYYY 형식으로 날짜를 예상하고있다.

               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 사용합니다.

  9. ==============================

    9.SQL 서버에서 실행이 실제로 있다는 날짜 형식

    SQL 서버에서 실행이 실제로 있다는 날짜 형식

    yyyy-mm-dd hh:MM:ss
    
  10. ==============================

    10.이 코드를 시도 할 수 있습니다

    이 코드를 시도 할 수 있습니다

    select (Convert(Date, '2018-04-01'))
    
  11. ==============================

    11.내가 NVARCHAR 필드에 삽입 된 것을 문자열로 합칠 수 GETDATE () 할 때 나는이 문제를 가지고 있었다.

    내가 NVARCHAR 필드에 삽입 된 것을 문자열로 합칠 수 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 (AS NVARCHAR DATETIME2 AS CAST (GETDATE ())) +'...

    다음을 연결하는 NVARCHAR로, datetime2에 같은 날짜를 주조.

  12. ==============================

    12.web.config 파일에서 영어로 문화를 설정

    web.config 파일에서 영어로 문화를 설정

      <globalization uiCulture="en-US" culture="en-US" />
    

    예를 들어, 당신은 할 것이다 아랍어 시간에 문화를 설정하는 경우

    22/09/2017 오전 2시 16분 57초

    당신은 오류 : 날짜를 삽입하는 동안 문자열에서 날짜 및 / 또는 시간을 변환 할 때 변환 실패

  13. ==============================

    13.이것은 쉽게 SQL-Server 날짜에 ISO 문자열로 변환하는 방법입니다 :

    이것은 쉽게 SQL-Server 날짜에 ISO 문자열로 변환하는 방법입니다 :

    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

  14. ==============================

    14.나를 위해이 일 :

    나를 위해이 일 :

    INSERT INTO [MyTable]
               ([ValidFrom]
               ,[ValidTo])
           VALUES
               ('2020-01-27 14:54:11.000'
               ,'2023-01-27 14:52:50.000')
    
  15. from https://stackoverflow.com/questions/14119133/conversion-failed-when-converting-date-and-or-time-from-character-string-while-i by cc-by-sa and MIT license