MSSQL - 날짜 형식 다루기, 날짜 및 시간 표시 형식 변경하기 (CAST/CONVERT/FORMAT)

개요

데이터베이스에서 날짜를 다룰 때 날짜별로 결과를 확인하거나 데이터를 처리해야되는 경우가 있다.

하지만 데이터베이스 혹은 프레임워크에 따라 서로 다른 날짜 표시 형식으로 출력될 수 있다.

이로 인해 매번 다르게 처리해야하는 곤란할 경우가 생길 수 있다.

(시계열 데이터가 다르게 출력되는 이유는 데이터베이스의 버전, 데이터베이스 시스템에 설정된 언어, 데이터베이스 및 테이블에 정의된 인코딩 형식에 따라 다를 수 있다.)

  • 예시
종류 내용 날짜 출력 형식
A데이터베이스 날짜 및 시간 데이터 형식의 데이터 출력 2024-01-24 12:00:00
B데이터베이스 날짜 및 시간 데이터 형식의 데이터 출력 2024-01-24 12:00:00.000
C데이터베이스 문자열 관련 함수(LEFT) 사용하여 출력 Jan 24 2024 12:57PM

 

위의 예시처럼 시계열 원본의 값이 같은 데이터가 서로 다른 표시 형식으로 표현된다면 어떻게 해야할까?

정답은 데이터베이스에 저장된 날짜 및 데이터 형식의 시계열 데이터를 일관된 특정 형식으로 변경하여 출력하면 된다.

FORMAT 함수를 이용하여 날짜의 형식을 변경할 수도 있다.

단, FORMAT 함수를 사용할 경우 위와 같은 서로 다른 시스템에서 또 다시 문제가 되풀이 될 수 있다.

이러한 경우를 방지하기 위해서 날짜 및 시간의 표시 형식을 변경할 때에는 사전에 정의된 표준 표시 형식을 공통으로 사용하여 혼선을 줄일 수 있다.

가장 표준적인 시계열 표시 형식은 'ODBC 표준'을 따르는 표시 형식이다. (예: 2024-01-24 12:00:00)


이 포스팅은 날짜의 표시 형식을 변경하는 내용을 다룬다.

SSMS DB에서 시간을 확인하거나 특정 시간 확인이 필요한 경우는 아래의 포스팅을 참고하자.

 

MSSQL - 현재 시간 구하기, 현재 날짜와 시간 요소 추출하기(년,월,일,시,분,초)

현재 시간 확인 (getdate, current_timestamp) GETDATE() 년-월-일 시:분:초.밀리초로 구성 시스템의 날짜와 시간을 반환 -- 현재 시간 구하기 SELECT GETDATE() AS '현재시간' CURRENT_TIMESTAMP GETDATE()와 동일한 기능

luvris2.tistory.com


날짜 표시 방법 바꾸기 (날짜 포맷 형식 변경)

CAST 및 CONVERT 함수

설명

날짜 및 시간 데이터 타입을 변환하려면 CAST 및 CONVERT 함수를 사용하여야 한다.

위의 함수를 통해 날짜 타입의 표시 형식을 원하는 형식으로 바꿀 수 있다.

일반적으로는 ODBC 표준 표시 형식을 따른다.

예시) 현재 시각 : 2024-01-24 12:36:08.173

  • 2024-01-24 12:36:08.173 (밀리초가 포함된 ODBC 표시형식)
  • 2024-01-24 12:36:08 (ODBC 표시형식)
  • 2024.01.24 (ANSI 표시형식)
  • 20240124 (ISO 표시형식)
  • 등등

기본 구문

-- CAST 구문
CAST ( expression AS data_type [ ( length ) ] )

-- CONVERT 구문
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

날짜 변환표

주로 많이 쓰는 날짜 표시 형식 크게 두 가지이다.

  • 120(ODBC 표준)
  • 121(밀리초가 포함된 ODBC 표준)
두 자리 연도(yy) 네 자리 연도
(yyyy)
Standard 입출력
- 0 또는 1001,2 datetime  smalldatetime의 기본값 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 또는 113 유럽 기본값 + 밀리초 dd mon yyyy hh:mi:ss:mmm(24시간)
14 114 - hh:mi:ss:mmm(24시간)
- 20 또는 120 ODBC 표준 yyyy-mm-dd hh:mi:ss(24시간)
- 21 또는 25 또는 121 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
- 126 ISO8601 yyyy-mm-ddThh:mi:ss.mmm(공백 없음)
- 127 ISO8601(Z 표준 시간대) yyyy-MM-ddThh:mm:ss.fffZ(공백 없음)
- 130 Hijri dd mon yyyy hh:mi:ss:mmmAM
- 131 Hijri dd/mm/yyyy hh:mi:ss:mmmAM

반응형

날짜 표시 형식 변경 예시

select convert(nvarchar(max), getdate(), 102)
-- 2024.01.24


select convert(nvarchar(max), getdate(), 103)
-- 24/01/2024


select convert(nvarchar(max), getdate(), 12)
-- 240124


select convert(nvarchar(max), getdate(), 120)
-- 2024-01-24 12:36:08


select convert(nvarchar(max), getdate(), 121)
-- 2024-01-24 12:36:08.173

FORMAT 함수

설명

날짜 및 시간 데이터 타입을 FORMAT 함수를 통해서도 원하는 형식으로 변경할 수 있다.

FORMAT 함수는 표시되는 날짜 형식을 사용자가 임의대로 표시 형식을 변경할 수 있다는 장점이 있다.

단, 서로 다른 시스템에서 표시 형식의 차이로 인한 오류 발생 가능성을 염두하여야 한다.


기본 구문

FORMAT( value, format [, culture ] )

날짜 형식 (날짜 포맷)

예시 : 2024년 1월 24일 오후 1시 2분 3초

문자 설명 입출력
yy 또는 yyyy 연도 두 자리 / 네 자리 표시 24 또는 2024
M 또는 MM 월 한두 자리 표시 1 또는 01
d 또는 dd 일 한두 자리 표시 24 또는 24 (1일의 경우 1 또는 01)
ddd 요일을 세 글자로 표시 Wed (수)
dddd 요일 표시 Wednesday (수요일)
h 또는 hh 시간 한두 자리 표시 1 또는 01
m 또는 mm 분 한두 자리 표시 2 또는 02
s 또는 ss 초 한두 자리 표시 3 또는 03
f 또는 ff 또는 fff 밀리초 1~3 자리 표시 .0 또는 .00 또는 .000
t 또는 tt 오전 오후 표시 P 또는 PM (오 또는 오후)

날짜 표시 형식 변경 예시

  • SSMS(MS-SQL)의 설정 언어에 따라 나오는 요일 및 오전/오후 정보가 다르게 출력될 수 있다.
select format(getdate(), 'yy년 M월 d일 dddd tt hh시 mm분 ss.fff초')
-- 24년 1월 24일 수요일 오후 01시 52분 44.973초

참고