
실무에서 " 오늘부터 30일 후 ", " 두 날짜 사이가 며칠인지 ", " 특정 일자로부터 오늘이 며칠째인지" 와 같은 날짜 계산이 필요한 경우가 꽤 자주 있다. 이럴 때 사용하는 함수가 DATEDIFF 와 DATEADD 다. 오늘은 이 두가지 함수를 한 번에 정리해 보려고 한다.
Create Data
CREATE TABLE #temp_contract
(
member_nm VARCHAR(20),
start_dt DATE,
end_dt DATE
)
INSERT INTO #temp_contract VALUES ('홍길동', '2026-01-01', '2026-06-30')
INSERT INTO #temp_contract VALUES ('임꺽정', '2026-03-15', '2026-09-14')
INSERT INTO #temp_contract VALUES ('고길동', '2025-12-01', '2026-11-30')
SELECT * FROM #temp_contract

DATEDIFF
- 두 날짜 사이의 차이 계산
- DATEDIFF(단위, 시작일, 종료일)
- 종료일 - 시작일 기준으로 차이값을 반환
- 단위에 따라 일 (DAY), 월 (MONTH), 년(YEAR) 등으로 결과가 달라짐
SELECT member_nm,
start_dt,
end_dt,
DATEDIFF(DAY, start_dt, end_dt) AS diff_day,
DATEDIFF(DD, start_dt, end_dt) AS diff_day,
DATEDIFF(MONTH, start_dt, end_dt) AS diff_month,
DATEDIFF(MM, start_dt, end_dt) AS diff_month
FROM #temp_contract

단위를 DAY로 쓰면 일수 차이, MONTH 로 쓰면 월수 차이가 반환된다.
MONTH 의 경우 정확한 날짜 기준이 아니라 월 단위 절삭으로 계산되기 떄문에 1월 1일 ~ 6월 30일은 5개월로 표기된다.
약어로도 사용할 수 있는데 DAY와 DD / MONTH와 MM 은 같은 단위로 사용된다.
자주 쓰는 단위 목록 및 약어 표기
| 단위 | 약어 | 설명 |
| YEAR | YY | 연도 차이 |
| MONTH | MM | 월 차이 |
| DAY | DD | 일 차이 |
| HOUR | HH | 시간 차이 |
| MINUTE | MI | 분 차이 |
| SECOND | SS | 초 차이 |
DATEADD
- 날짜에 값 더하기/빼기
- DATEADD(단위, 더할값, 기준날짜)
- 더할 값에 음수를 넣으면 날짜를 빼는 것으로 처리
SELECT member_nm,
end_dt,
DATEADD(DAY, 30, end_dt) AS plus_30day, -- 만료일 30일 후
DATEADD(MONTH, -1, end_dt) AS minus_1month -- 만료일 1개월 전
FROM #temp_contract

만료일 기준으로 30일 후 날짜나, 1개월 전 날짜를 구할 수 있다. 만료 알림 발송 대상을 추출할 때 이런 패턴들을 자주 사용하게 된다.
[MS-SQL] DATEPART, DATENAME - 일자(요일,주차,분기) 함수
특정 일자의 요일이나 주차 또는 분기 등을 추출하여 사용해야할 때가 있다. 이럴 때 DATEPART 라는 함수를 이용하면 일자의 요일 등을 확인할 수가 있다.DATEPART날짜를 인수로 받아 해당 날짜의 요
dogsdream.tistory.com
[MS-SQL] CONVERT, FORMAT, YEAR, MONTH, DAY
지난 글에서 CONVERT 변환에 관련하여 작성하였었는데, 오늘은 날짜 포맷 변경 방법에서 비교가 가능한 CONVERT와 FORMAT 의 사용방법과 차이점을 알아보려고 한다.CONVERT 는 날짜가 아니어도 자료형
dogsdream.tistory.com
'데이터베이스[DB] > MSSQL' 카테고리의 다른 글
| [MSSQL] PIVOT - 행을 열로 바꾸기 (0) | 2026.06.19 |
|---|---|
| [MSSQL] OFFSET, FETCH NEXT - 페이징 처리하기 (0) | 2026.06.15 |
| [MSSQ] EXISTS vs IN - 어느 쪽이 더 빠를까? (0) | 2026.06.12 |
| [MSSQL] 임시테이블(#temp), 테이블변수(@table) (0) | 2026.05.13 |
| [MSSQ] WHILE, BREAK, CONTINUE - 반복문 (0) | 2026.05.12 |
| [MSSQL] WITH(NOLOCK) (0) | 2026.05.11 |
| [MSSQL] ISNULL, NULLIF (0) | 2026.05.08 |
| [MSSQL] 데이터 타입 변환 ( CAST, CONVERT, TRY_CAST, TRY_CONVERT ) (0) | 2026.01.09 |