SQL Server
datetime2, datetime 날짜형 비교
미스터몽키
2018. 9. 29. 02:15
time 형식은 시간만(날짜부분없음) 소수점 7자리까지 표현, 3~5바이트 사용 , 00:00:00부터 23:59:59까지
date 형식은 날짜만(시간부분없음), 3바이트 사용 , 0001-01-01부터 9999-12-31까지
datetime 형식은 초단위 아래 소수점 3자리까지 표현, 8바이트 사용 , 1753-01-01부터 9999-12-31까지
datetime2 형식은 초단위 아래 소수점 7자리까지 표현, 6~8바이트 사용, 0001-01-01부터 9999-12-31까지
smalldatetime 형식은 분단위까지 표현, 4바이트 사용 , 1900-01-01부터 2079-06-06까지
GETDATE() 함수는 datetime 형식을 리턴하고
SYSDATETIME() 함수는 datetime2 형식을 리턴한다.(더 정확하다)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | SELECT GETDATE(), -- 2018-09-29 02:06:56.167 SYSDATETIME() -- 2018-09-29 02:06:56.1698423 SELECT CONVERT(smalldatetime, GETDATE()), -- 2018-09-29 02:07:00 CONVERT(datetime, GETDATE()), -- 2018-09-29 02:06:56.167 CONVERT(datetime, SYSDATETIME()), -- 2018-09-29 02:06:56.170 CONVERT(datetime2, GETDATE()), -- 2018-09-29 02:06:56.1670000 CONVERT(datetime2, SYSDATETIME()), -- 2018-09-29 02:06:56.1698423 CONVERT(datetime2(0), SYSDATETIME()), -- 2018-09-29 02:06:56 CONVERT(datetime2(1), SYSDATETIME()), -- 2018-09-29 02:06:56.2 CONVERT(datetime2(2), SYSDATETIME()), -- 2018-09-29 02:06:56.17 CONVERT(datetime2(3), SYSDATETIME()), -- 2018-09-29 02:06:56.170 CONVERT(datetime2(4), SYSDATETIME()), -- 2018-09-29 02:06:56.1698 CONVERT(datetime2(5), SYSDATETIME()), -- 2018-09-29 02:06:56.16984 CONVERT(datetime2(6), SYSDATETIME()), -- 2018-09-29 02:06:56.169842 CONVERT(datetime2(7), SYSDATETIME()), -- 2018-09-29 02:06:56.1698423 CONVERT(time(7), SYSDATETIME()), -- 02:06:56.1698423 CONVERT(time(0), SYSDATETIME()) -- 02:06:56 |
smalldatetime 형식은 년도 범위가 좁고 초단위가 없어서 사용하기 불안하고(혹시 사용자가 2080년을 입력하면 오류가 나서)
그동안 초단위가 필요할 때 datetime 형식을 사용했지만 소수점 아래 3자리까지 불필요하게 가져오게되고
프로그램에서 마스킹 처리해서 초단위 아래를 안보이게 했었다. 물론 8바이트로 저장되는 것도 부담스럽고
날짜만 필요한 경우 date 형을 사용하듯이 앞으로 초단위까지만 필요할 때 datetime2(0) 형식을 사용해야할 것 같다. 사용하는 바이트도 6바이트로 datetime 형식보다 저장소 크기도 작다.
추가로 시간부분 초단위만 필요한 경우 time(0)을 사용하면된다.
SQL Server 2008부터 date 형식, datetime2 형식 time 형식을 지원한다.