복붙노트

[SQL] SQL 서버에서 날짜로 변환 VARCHAR

SQL

SQL 서버에서 날짜로 변환 VARCHAR

어떻게 2008 SQL 서버에서 날짜로 형식 mm의 DD의 YYYY의 문자열을 변환합니까?

내 목표 컬럼은 날짜 시간에

나는 변환으로 시도하고 난 오류 메시지가 표시 그러나 날짜 스타일의 대부분의 값 :

해결법

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

    1.영업 이익은 MMDDYY 원하고 일반 변환합니다 그것을위한하지 작업 :

    영업 이익은 MMDDYY 원하고 일반 변환합니다 그것을위한하지 작업 :

    select convert(datetime,'12312009')
    
    Msg 242, Level 16, State 3, Line 1 
    The conversion of a char data type to a datetime data type resulted in 
    an out-of-range datetime value
    

    그래서이 시도 :

    DECLARE @Date char(8)
    set @Date='12312009'
    SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))
    

    산출:

    -----------------------
    2009-12-31 00:00:00.000
    
    (1 row(s) affected)
    
  2. ==============================

    2.SQL 서버는 암시 날짜에 'YYYYMMDD'의 형태로 문자열을 캐스팅 할 수 있습니다 - 다른 모든 문자열이 명시 적으로 캐스팅해야합니다. 여기에 대해 얘기 양식에서 변환을 수행하는 두 빠른 코드 블록은 다음과 같습니다 :

    SQL 서버는 암시 날짜에 'YYYYMMDD'의 형태로 문자열을 캐스팅 할 수 있습니다 - 다른 모든 문자열이 명시 적으로 캐스팅해야합니다. 여기에 대해 얘기 양식에서 변환을 수행하는 두 빠른 코드 블록은 다음과 같습니다 :

    버전 1 개 사용 단위 변수 :

    BEGIN 
    DECLARE @input VARCHAR(8), @mon CHAR(2), 
    @day char(2), @year char(4), @output DATETIME
    
    SET @input = '10022009'   --today's date
    
    
    SELECT @mon = LEFT(@input, 2), @day = SUBSTRING(@input, 3,2), @year = RIGHT(@input,4)
    
    SELECT @output = @year+@mon+@day 
    SELECT @output 
    END
    

    버전 2는 단위 변수를 사용하지 않습니다

    BEGIN 
    DECLARE @input CHAR(8), @output DATETIME
    SET @input = '10022009' --today's date 
    
    SELECT @output = RIGHT(@input,4) + SUBSTRING(@input, 3,2) + LEFT(@input, 2)
    
    SELECT @output
    END
    

    두 경우는 암시 적 변환을 수행하는 SQL 서버의 능력에 의존하고있다.

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

    3.나는 문자열 조작없이, 내 변환이가 도움이되었다고합니다. https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

    나는 문자열 조작없이, 내 변환이가 도움이되었다고합니다. https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

    CONVERT(VARCHAR(23), @lastUploadEndDate, 121)
    

    YYYY-MM-DD HH : MI : ss.mmm (24)는 내가 필요로하는 형식이었다.

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

    4.변환은 일반 해답이 될 것입니다,하지만 형식은 MM / DD / YYYY이 변환을 사용하여 변환 할 수있는 변환기를위한 인식 형식 (날짜, yourdatestring, 101)가 아니라 실패 있도록 해당 형식이 없습니다.

    변환은 일반 해답이 될 것입니다,하지만 형식은 MM / DD / YYYY이 변환을 사용하여 변환 할 수있는 변환기를위한 인식 형식 (날짜, yourdatestring, 101)가 아니라 실패 있도록 해당 형식이 없습니다.

    문제는 비표준되는 형식으로, 당신은 변환이 가능한 것과 이해할 수있는 표준을 조작해야 할 것입니다.

    당신이 형식을 보장 할 수있는 경우, 함께 해킹

    declare @date char(8)
    set @date = '12312009'
    select convert(datetime, substring(@date,5,4) + substring(@date,1,2) + substring(@date,3,2),112)
    
  5. ==============================

    5.가능성 당신은 변환 할 수없는 잘못된 데이터가 있습니다. 이 같은 빨리 또는 2009년 2월 30일로 날짜를 수를 변경할 수 없기 날짜는 VARCHAR에 저장해서는 안됩니다. 변환 할 수없는 레코드를 찾기 위해 데이터에 대한 ISDATE () 함수를 사용합니다.

    가능성 당신은 변환 할 수없는 잘못된 데이터가 있습니다. 이 같은 빨리 또는 2009년 2월 30일로 날짜를 수를 변경할 수 없기 날짜는 VARCHAR에 저장해서는 안됩니다. 변환 할 수없는 레코드를 찾기 위해 데이터에 대한 ISDATE () 함수를 사용합니다.

    확인을 나는 알고 좋은 데이터를 테스트하고 여전히 메시지를 받았습니다. 당신은 12,302,009는 MMDDYYYY 또는 DDMMYYYY 경우가 모르는 변경할 수 없기 다른 형식으로 변환해야합니다. YYYYMMDD의 형식은 모호하지 않고 SQL 서버가 제대로 변환됩니다

    나는 일이있어 :

    cast( right(@date,4) + left(@date,4) as datetime)
    

    당신이 '112009'와 같은 비표준 형식이나 텍스트 값 또는 범위 날짜의 진정한 아웃에있는 그 어떤 경우하지만 당신은 여전히 ​​오류 메시지가 표시됩니다.

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

    6.시작해야 BOL에서 CAST / CONVERT 봐.

    시작해야 BOL에서 CAST / CONVERT 봐.

    대상 열은 변환 할 필요가 없습니다 날짜 인 경우, SQL은 당신을 위해 그것을 할 것입니다.

    그렇지 않으면

    CONVERT(datetime, '20090101')
    

    그것을해야한다.

    이뿐만 아니라 도움이 링크입니다 :

  7. ==============================

    7.나는 나눔 문자를 삽입 한 다음 적절한 스타일로 CONVERT를 사용하는 다도를 사용하십시오. 이 같은:

    나는 나눔 문자를 삽입 한 다음 적절한 스타일로 CONVERT를 사용하는 다도를 사용하십시오. 이 같은:

    DECLARE @dt VARCHAR(100)='111290';
    SELECT CONVERT(DATETIME,STUFF(STUFF(@dt,3,0,'/'),6,0,'/'),3)
    

    첫째로 당신은 당신이 날짜에이를 변환 할 3를 사용하는 것보다, 111290 대신 11/12/90를 얻기 위해 두 번 다도를 사용 : - CAST에 대한 자세한 내용을 (또는 다른 피팅 형식 사용을 독일어, 영국에 ....) 및 CONVERT

    베스트 제대로 날짜와 시간 값을 저장했다.

    모든 문화 구체적인 형식은 조만간 문제로 이어질 것 ...

  8. ==============================

    8.나는 비슷한 뭔가 운이 :

    나는 비슷한 뭔가 운이 :

    Convert(DATETIME, CONVERT(VARCHAR(2), @Month) + '/' + CONVERT(VARCHAR(2), @Day)
    + '/' + CONVERT(VARCHAR(4), @Year))
    
  9. ==============================

    9.사용 Try_Convert : 지정된 데이터 유형 캐스트가 성공하면에 값 캐스트를 돌려줍니다 그렇지 않으면 NULL을 반환합니다.

    사용 Try_Convert : 지정된 데이터 유형 캐스트가 성공하면에 값 캐스트를 돌려줍니다 그렇지 않으면 NULL을 반환합니다.

    DECLARE @DateString VARCHAR(10) ='20160805'
    SELECT TRY_CONVERT(DATETIME,@DateString)
    
    SET @DateString ='Invalid Date'
    SELECT TRY_CONVERT(DATETIME,@DateString)
    

    링크 : MSDN TRY_CONVERT (Transact-SQL)를 참조하십시오

  10. ==============================

    10.나는 미국의 기본은 MM-DD-YYYY를 110 것 때문에 CONVERT, 당신은 스타일 (날짜 형식)를 포함 할 수있는 최선의 선택을 생각합니다.

    나는 미국의 기본은 MM-DD-YYYY를 110 것 때문에 CONVERT, 당신은 스타일 (날짜 형식)를 포함 할 수있는 최선의 선택을 생각합니다.

  11. ==============================

    11.이 문제의 근본 원인은 국가 별 설정에있을 수 있습니다 - DB는 예를 들어, 앱 sents 동안 YYYY-MM-DD 기다리고, DD-MM-YYYY (러시아어 로케일 형식) 내 경우 있다는 사실. 모든 내가 그랬어 - 변경 로케일 형식 러시아어에서 영어 (미국) 짜잔에.

    이 문제의 근본 원인은 국가 별 설정에있을 수 있습니다 - DB는 예를 들어, 앱 sents 동안 YYYY-MM-DD 기다리고, DD-MM-YYYY (러시아어 로케일 형식) 내 경우 있다는 사실. 모든 내가 그랬어 - 변경 로케일 형식 러시아어에서 영어 (미국) 짜잔에.

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

    12.이것은 가장 쉬운 방법을 보인다 ..

    이것은 가장 쉬운 방법을 보인다 ..

    SELECT REPLACE(CONVERT(CHAR(10), GETDATE(), 110),'-','')
    
  13. ==============================

    13.SQL 표준 날짜 삽입하는 동안 또는 업데이트 11:59:59 AM 12시 0분 0초 1753년 1월 1일 사이 12/31/9999 PM이어야합니다.

    SQL 표준 날짜 삽입하는 동안 또는 업데이트 11:59:59 AM 12시 0분 0초 1753년 1월 1일 사이 12/31/9999 PM이어야합니다.

    당신이 삽입하는 경우에 따라서 / 1753년 1월 1일 이하로 업데이트하면이 오류가 발생합니다.

  14. from https://stackoverflow.com/questions/1509977/convert-varchar-into-datetime-in-sql-server by cc-by-sa and MIT license