ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MSSQL CONVERT 사용법 및 날짜 포맷
    IT/SQL 2024. 4. 6. 18:54

    CONVERT 사용법

    CONVERT 의 경우 날짜포맷을 변경하는 용도로 주로 사용하는데, 구문 및 옵션은 아래와 같고, 그 외의 경우(형변환)에는 몇글자라도 짧은 CAST 를 주로 사용한다.

    SELECT CONVERT(NCHAR(8), GETDATE(), 112)

     

    Convert 를 사용한 날짜포맷 변경 결과, 20240406으로 표시됨
    convert 결과

     

    이렇게 마지막 옵션에 112 를 넣으면 char(8) 로 'YYYYMMDD' 형식으로 변환되는데, 마지막 옵션 112 자리에 다른 값들을 넣으면 다른 형식으로 변환이 가능하다, 보통 112,120을 많이 사용한다.

     

    옵션 자리에 들어갈 수 있는 코드는 아래 표 참조 

     

    두 자리 연도(yy)1 네 자리 연도(yyyy) Standard 입출력3
    - 0 또는 1001,2 datetimesmalldatetime의 기본값 mon dd yyyy hh:miAM(또는 PM)
    1 101 미국 1 = mm/dd/yy
    101 = mm/dd/yyyy
    2 102 ANSI 2 = yy.mm.dd
    102 = yyyy.mm.dd
    3 103 영국/프랑스 3 = dd/mm/yy
    103 = dd/mm/yyyy
    4 104 독일어 4 = dd.mm.yy
    104 = dd.mm.yyyy
    5 105 이탈리아어 5 = dd-mm-yy
    105 = dd-mm-yyyy
    6 1061 - 6 = dd mon yy
    106 = dd mon yyyy
    7 1071 - 7 = Mon dd, yy
    107 = Mon dd, yyyy
    8 또는 24 108 - hh:mi:ss
    - 9 또는 1091,2 기본값 + 밀리초 mon dd yyyy hh:mi:ss:mmmAM(또는 PM)
    10 110 USA 10 = mm-dd-yy
    110 = mm-dd-yyyy
    11 111 일본 11 = yy/mm/dd
    111 = yyyy/mm/dd
    12 112 ISO 12 = yymmdd
    112 = yyyymmdd
    - 13 또는 1131,2 유럽 기본값 + 밀리초 dd mon yyyy hh:mi:ss:mmm(24시간)
    14 114 - hh:mi:ss:mmm(24시간)
    - 20 또는 1202 ODBC 표준 yyyy-mm-dd hh:mi:ss(24시간)
    - 21 또는 25 또는 1212 time, date, datetime2, datetimeoffset의 ODBC 표준(밀리초 포함) 기본값 yyyy-mm-dd hh:mi:ss.mmm(24시간)
    22 - 미국 mm/dd/yy hh:mi:ss AM(또는 PM)
    - 23 ISO8601 yyyy-mm-dd
    - 1264 ISO8601 yyyy-mm-ddThh:mi:ss.mmm(공백 없음)6
    - 1278, 9 ISO8601(Z 표준 시간대) yyyy-MM-ddThh:mm:ss.fffZ(공백 없음)6
    - 1301,2 Hijri 5 dd mon yyyy hh:mi:ss:mmmAM7
    - 1312 Hijri 5 dd/mm/yyyy hh:mi:ss:mmmAM

     

     

    그런데 날짜 형식 변환을 CONVERT 로 하는 것 보다는 FORMAT 함수 를 이용하는 편이 좀 더 직관적이라서 권장하는 방식이다. 참고 : MSSQL Format 함수

    ms 문서 : https://learn.microsoft.com/ko-kr/sql/t-sql/functions/format-transact-sql?view=sql-server-ver16

    SELECT FORMAT(GETDATE(), 'yyyy-MM-dd'), FORMAT(GETDATE(), 'yyyyMMdd')

     

    결과

    Format 을 이용해서 날짜 형식을 표시한 결과

     

    이런 날짜변환말고 DataType 변환이 필요한 경우는 CAST 함수를 많이 사용한다.

     

     

    SELECT CAST( 3.3 AS NUMERIC(8,4))

     

     

    주의점

     

    CONVERT 이든 CAST 이든 뭔가 값을 변환할 때 원본이 되는 값이 날짜/숫자 형식으로 변환이 가능한 지 먼저 확인해봐야 런타임에서 나는 에러를 방지할 수 있어서 ISNUMERIC, ISDATE 등의 함수로 먼저 체크를 한 후에 변환하는게 좋다.

    데이터는 숫자/날짜로 변환이 가능한 데이터가 들어오도록 설계되었지만 입력단에 구멍이 있어서 예상하지 못한 데이터가 들어오는 경우도 있어서...

     

    DECLARE @A VARCHAR(1)
    SET @A = 'A'
    SELECT CAST( @A AS INT)

     

     

     

    DECLARE @A VARCHAR(1)
    SET @A = 'A'
    SELECT CASE WHEN ISNUMERIC(@A) > 0 THEN CAST( @A AS INT) ELSE NULL END

    댓글

Designed by Tistory.