DATETIME 형식으로 형변환하면 날짜 관련 연산 및 비교가 쉬워진다.CAST() 함수를 통해 문자열을 날짜로 변환할 수 있다.YYYYMMDD, YYYYMMDD hh:mm:ss 형식으로 입력하는 것이 가장 안정적이다.SELECT CAST('20200425 05:03' AS DATETIME);
SELECT CAST('20200425 05:03:22' AS DATETIME);
| 입력 형식 | 결과 |
|---|---|
| '20220122' | 2022-01-22 00:00:00.000 |
| '2022' | 2022-01-01 00:00:00.000 |
| '202204' | ❌ (오류 발생) |
⚠
'202204'처럼 연/월만 있는 값은 허용되지 않습니다!
-- T-SQL 함수
SELECT GETDATE();
-- SQL 표준
SELECT CURRENT_TIMESTAMP;
-- 표준 시간(GMT)
SELECT GETUTCDATE();
GETDATE()와CURRENT_TIMESTAMP는 동일한 값을 반환.
GETUTCDATE()는 전 세계 어디서나 같은 시간을 반환하므로 글로벌 서비스에 유용.
테이블 컬럼이 datetime 형식이면 INSERT 시 문자열이 자동으로 변환된다.
-- 명시적 형변환
INSERT INTO DateTimeTest ([time]) VALUES (CAST('20210418' AS DATETIME));
-- 자동 형변환
INSERT INTO DateTimeTest ([time]) VALUES ('20210418');
-- 특정 날짜 이후 데이터 조회
SELECT * FROM DateTimeTest
WHERE time >= CAST('20100101' AS DATETIME);
-- 자동 변환 활용
SELECT * FROM DateTimeTest
WHERE time >= '20100101';
-- 현재 시간 이후
SELECT * FROM DateTimeTest
WHERE time >= CURRENT_TIMESTAMP;
DATEADD-- 1년 후
SELECT DATEADD(YEAR, 1, '20200426'); -- 2021 → 2022
-- 5일 후
SELECT DATEADD(DAY, 5, '20200426'); -- 04-26 → 05-01
-- 123123초 후
SELECT DATEADD(SECOND, 123123, '20200426');
-- 123123초 전 (음수)
SELECT DATEADD(SECOND, -123123, '20200426');
DATEADD(단위, 수치, 기준날짜)형식
단위:YEAR,MONTH,DAY,HOUR,MINUTE,SECOND
DATEDIFF-- 초 단위 차이 계산
SELECT DATEDIFF(SECOND, '20200426', '20200503'); -- +604800
-- 결과가 음수인 경우도 가능
SELECT DATEDIFF(SECOND, '20210828', '20210503'); -- 음수 값
형식:
DATEDIFF(단위, 기준일, 대상일)
결과 = 대상일 - 기준일
-- DATEPART
SELECT DATEPART(YEAR, '20200826'); -- 2020
SELECT DATEPART(DAY, '20200826'); -- 26
-- 전용 함수
SELECT YEAR('20200826'); -- 2020
SELECT MONTH('20200826'); -- 8
SELECT DAY('20200826'); -- 26
| 타입 | 설명 |
|---|---|
date | 연/월/일 |
time | 시/분/초 |
datetime | 연/월/일 + 시/분/초 |
varchar대신 전용 날짜 타입을 활용하면 연산 및 비교가 훨씬 편리함!
SELECT DATEADD(DAY, 30, GETDATE());
SELECT *
FROM MailBox
WHERE expireAt >= GETDATE();
SELECT nameFirst + ' ' + nameLast AS fullName,
CAST(debut AS DATETIME) AS debutDate
FROM players
WHERE debut IS NOT NULL;