🧠 기본 개념

  • 문자열로 표현된 날짜를 DATETIME 형식으로 형변환하면 날짜 관련 연산 및 비교가 쉬워진다.
  • SQL에서는 CAST() 함수를 통해 문자열을 날짜로 변환할 수 있다.
  • 날짜는 YYYYMMDD, YYYYMMDD hh:mm:ss 형식으로 입력하는 것이 가장 안정적이다.

🔄 문자열 → DATETIME 형변환

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 자동 형변환

테이블 컬럼이 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 대신 전용 날짜 타입을 활용하면 연산 및 비교가 훨씬 편리함!


💡 실전 활용 예시

🔸 우편물 보관 기간 (30일)

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;

profile
李家네_공부방

0개의 댓글