개요
MSSQL 날짜포맷 변경은 Format 함수를 이용하는 방법과 convert 함수를 이용하는 방법이 있습니다.
YYYYMMDD 형식을 예로 들었을 때, Format 함수를 이용하는 것이, Convert ( nchar(8), getdate(), 112) 보다는 형태가 직관적이라서 관리가 용이합니다. 그리고 format 함수는 날짜 뿐만 아니라 숫자의 포맷도 관리할 수 있습니다.
FORMAT 함수 구문
FORMAT( value, format [, culture ] )
Format 함수를 이용한 MSSQL 날짜포맷 예제
SELECT FORMAT(GETDATE(), 'yyyyMMdd')
, FORMAT(GETDATE(), 'yyyy-MM*dd')
, FORMAT(GETDATE(), 'yyyy/MM/dd')
, FORMAT(GETDATE(), 'yyyy%MM\dd')

마지막 인수인 culture 를 지정하지 않고 실행한 결과입니다. ( 보통 지정하지 않고 사용합니다. )
기본적으로는 지정한 형식이 먹는데, 일부 예약된 기호들은( /, %, \ ) 안먹습니다.
yyyy/mm/dd 형태 예제
결과값이 yyyy/mm/dd 형태로 나오는 예제입니다. 마지막 인수에 en-US 를 넣어주면 / 로 구분된 날짜가 표시됩니다.
SELECT FORMAT(GETDATE(), 'yyyy/MM/dd', 'en-US')

Convert 함수를 이용한 MSSQL 날짜포맷 예제
SELECT CONVERT(NCHAR(10), GETDATE(), 120) AS C120
, CONVERT(NCHAR(8) , GETDATE(), 112) AS C112

FORMAT 함수의 두 번째 인수에 들어갈 수 있는 값들
형식 지정자 | 설명 | 예제 |
---|---|---|
“d” | 간단한 날짜 패턴입니다. 추가 정보:간단한 날짜(“d”) 서식 지정자. |
2009-06-15T13:45:30 -> 2009년 6월 15일(en-US) 2009-06-15T13:45:30 -> 2009/15/06(fr-FR) 2009-06-15T13:45:30 -> 2009/06/15(ja-JP) |
“D” | 자세한 날짜 패턴입니다. 추가 정보:자세한 날짜(“D”) 서식 지정자. |
2009-06-15T13:45:30 -> 2009년 6월 15일 월요일(en-US) 2009-06-15T13:45:30 -> понедельник, 15 июня 2009 . (ru-RU) 2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE) |
“f” | 전체 날짜/시간 패턴(간단한 시간)입니다. 추가 정보: 전체 날짜 간단한 시간(“f”) 서식 지정자. |
2009-06-15T13:45:30 -> 2009년 6월 15일 월요일 오후 1:45(en-US) 2009-06-15T13:45:30 -> den 15 juni 2009 13:45 (sv-SE) 2009-06-15T13:45:30 -> Σσσα, 15 σ 2009 1:45 μμ (el-GR) |
“F” | 전체 날짜/시간 패턴(자세한 시간) 추가 정보: 전체 날짜 자세한 시간(“F”) 서식 지정자. |
2009-06-15T13:45:30 -> 2009년 6월 15일 월요일 오후 1:45:30(en-US) 2009-06-15T13:45:30 -> den 15 juni 2009 13:45:30 (sv-SE) 2009-06-15T13:45:30 -> Σσσα, 15 σ 2009 1:45:30 μμ (el-GR) |
“g” | 일반 날짜/시간 패턴(간단한 시간) 추가 정보: 일반 날짜 간단한 시간(“g”) 서식 지정자. |
2009-06-15T13:45:30 -> 6/15/2009 오후 1:45(en-US) 2009-06-15T13:45:30 -> 15/06/2009 13:45(es-ES) 2009-06-15T13:45:30 -> 2009/6/15 13:45(zh-CN) |
“G” | 일반 날짜/시간 패턴(자세한 시간)입니다. 추가 정보: 일반 날짜 자세한 시간(“G”) 서식 지정자. |
2009-06-15T13:45:30 -> 6/15/2009 1:45:30 PM(en-US) 2009-06-15T13:45:30 -> 15/06/2009 13:45:30(es-ES) 2009-06-15T13:45:30 -> 2009/6/15 13:45:30(zh-CN) |
“M”, “m” | 월/일 패턴입니다. 추가 정보: 월(“M”, “m”) 서식 지정자. |
2009-06-15T13:45:30 -> 6월 15일(en-US) 2009-06-15T13:45:30 -> 15. juni (da-DK) 2009-06-15T13:45:30 -> 15 Juni(id-ID) |
“O”, “o” | 왕복 날짜/시간 패턴입니다. 추가 정보: 왕복(“O”, “o”) 서식 지정자. |
DateTime 값: 2009-06-15T13:45:30 (DateTimeKind.Local) –> 2009-06-15T13:45:30.00000000-07:00 2009-06-15T13:45:30 (DateTimeKind.Utc) –> 2009-06-15T13:45:30.0000000Z 2009-06-15T13:45:30 (DateTimeKind.Unspecified) –> 2009-06-15T13:45:30.00000000 DateTimeOffset 값: 2009-06-15T13:45:30-07:00 –> 2009-06-15T13:45:30.00000000-07:00 |
“R”, “r” | RFC1123 패턴입니다. 추가 정보: RFC1123(“R”, “r”) 서식 지정자. |
DateTimeOffset 입력: 2009-06-15T13:45:30 -> 월, 15 6월 2009 20:45:30 GMT DateTime 입력: 2009-06-15T13:45:30 -> 월, 15 6월 2009 13:45:30 GMT |
“s” | 정렬 가능한 날짜/시간 패턴입니다. 추가 정보: 정렬 가능한(“s”) 서식 지정자. |
2009-06-15T13:45:30 (DateTimeKind.Local) -> 2009-06-15T13:45:30 2009-06-15T13:45:30 (DateTimeKind.Utc) -> 2009-06-15T13:45:30 |
“t” | 간단한 시간 패턴입니다. 추가 정보: 간단한 시간(“t”) 서식 지정자. |
2009-06-15T13:45:30 -> 오후 1:45(en-US) 2009-06-15T13:45:30 -> 13:45(hr-HR) 2009-06-15T13:45:30 -> 01:45 م(ar-EG) |
“T” | 자세한 시간 패턴 추가 정보: 자세한 시간(“T”) 서식 지정자. |
2009-06-15T13:45:30 -> 오후 1:45:30(en-US) 2009-06-15T13:45:30 -> 13:45:30(hr-HR) 2009-06-15T13:45:30 -> 01:45:30 م(ar-EG) |
“u” | 정렬 가능한 유니버설 날짜/시간 패턴 추가 정보: 정렬 가능한 유니버설(“u”) 서식 지정자. |
값 사용 DateTime : 2009-06-15T13:45:30 -> 2009-06-15 13:45:30Z 값 사용 DateTimeOffset : 2009-06-15T13:45:30 -> 2009-06-15 20:45:30Z |
“U” | 유니버설 전체 날짜/시간 패턴입니다. 추가 정보: 유니버설 전체(“U”) 서식 지정자. |
2009-06-15T13:45:30 -> 2009년 6월 15일 월요일 오후 8:45:30(en-US) 2009-06-15T13:45:30 -> den 15 juni 2009 20:45:30 (sv-SE) 2009-06-15T13:45:30 -> Σσσα, 15 σ 2009 8:45:30 μμ (el-GR) |
“Y”, “y” | 연도 월 패턴 추가 정보: 연도 월(“Y”) 서식 지정자. |
2009-06-15T13:45:30 -> 2009년 6월(en-US) 2009-06-15T13:45:30 -> juni 2009(da-DK) 2009-06-15T13:45:30 -> Juni 2009(id-ID) |
기타 모든 단일 문자 | 알 수 없는 지정자입니다. | 런타임 FormatException을 throw합니다. |
위 표는 ms 문서를 가져온 것입니다. 자세한 내용은 링크로 이동해서 읽어보시면 됩니다.
파라미터에 직접 넣어보면서 테스트해보면 금방 원하는 날짜포맷을 만들 수 있습니다.
FORMAT 함수를 이용한 숫자 형식 변환
DECLARE @A NUMERIC(28,8)
SET @A = 12345.5678
SELECT FORMAT(@A, '#,#.#')
, FORMAT(@A, '0,0.00')
, FORMAT(@A, '00000000000.00')

숫자포맷 반올림 등 기타
format 함수 내에서 자동으로 반올림 되는 것이 싫으면 아래처럼 format 함수 내에서 첫번째 인수를 반올림/올림/버림 처리하면 됩니다.
SELECT FORMAT(FLOOR(1234.567*10)/10, '0,0.0')
FORMAT 함수 외에 STR 함수도 숫자포맷을 관리하는 데에 유용합니다.