🗓️ MSSQL 날짜 시간 함수 완벽 가이드 GETDATE DATEADD DATEDIFF FORMAT 활용법
📌 날짜 계산과 출력 형식을 내 마음대로, MSSQL 시간 함수 실전 예제까지
데이터베이스를 다루다 보면 날짜와 시간을 계산하거나, 원하는 형식으로 변환해야 하는 순간이 자주 찾아옵니다.
특히 업무 자동화, 리포트 생성, 기간별 통계 등 다양한 작업에서 MSSQL 날짜/시간 함수는 필수 도구로 자리 잡고 있죠.
하지만 막상 사용하려고 하면 함수의 종류가 많고, 각각의 기능과 문법을 헷갈리기 쉽습니다.
이번 글에서는 실제 프로젝트에서 자주 쓰이는 GETDATE, DATEADD, DATEDIFF, FORMAT 함수의 개념과 활용 방법을 한 번에 정리해 드리겠습니다.
단순 문법 소개를 넘어, 실무에서 바로 쓸 수 있는 팁과 주의사항도 함께 다루니 끝까지 읽어보시면 날짜 처리 실력이 확실히 업그레이드될 거예요.
이번 글은 MSSQL 초보자뿐 아니라 이미 데이터베이스를 다뤄본 경험이 있는 분들에게도 유용합니다.
날짜 계산, 시간 차이 비교, 특정 형식으로의 변환 같은 기본 기능은 물론, 성능 최적화와 예외 상황 처리까지 함께 알아볼 예정입니다.
이 가이드를 참고하시면 향후 복잡한 날짜 로직을 구현할 때 시행착오를 크게 줄일 수 있을 것입니다.
📋 목차
🕒 GETDATE 함수로 현재 날짜와 시간 가져오기
MSSQL에서 가장 기본적이고 자주 쓰이는 날짜/시간 함수가 바로 GETDATE()입니다.
이 함수는 데이터베이스 서버의 현재 날짜와 시간을 datetime 형식으로 반환합니다.
별도의 매개변수가 필요 없고, 실행 시점의 정확한 시스템 시간을 즉시 가져올 수 있어 로그 기록, 데이터 생성일 저장, 보고서 작성 등 다양한 곳에서 활용됩니다.
기본 사용 예시는 다음과 같습니다.
SELECT GETDATE() AS CurrentDateTime;
위 쿼리를 실행하면, 예를 들어 2025-08-10 14:35:27.123과 같은 결과를 얻게 됩니다.
이 값은 SQL 서버가 동작 중인 시스템의 시간대(Time Zone)를 기준으로 하며, UTC 기준 시간이 필요하다면 GETUTCDATE() 함수를 사용할 수 있습니다.
💎 핵심 포인트:
GETDATE는 서버의 현재 시간 값을 즉시 반환하며, 애플리케이션과의 시간 동기화가 필요할 때 중요한 역할을 합니다.
또한, GETDATE()는 함수 호출 시마다 새로운 값을 반환하므로, 동일 쿼리 내에서 여러 번 호출하면 밀리초 단위의 차이가 발생할 수 있습니다.
이 때문에 동일 시각을 유지해야 하는 경우에는 한 번만 호출한 결과를 변수에 저장해 사용하는 것이 좋습니다.
- 🛠️현재 서버 시간 가져오기 → GETDATE()
- 🌐UTC 기준 시간 가져오기 → GETUTCDATE()
- ⚠️동일 시각 유지 필요 시 변수에 저장 후 재사용
➕ DATEADD로 날짜와 시간 더하기 또는 빼기
MSSQL에서 날짜나 시간을 계산할 때 DATEADD() 함수는 매우 유용합니다.
이 함수는 지정한 날짜에 원하는 기간을 더하거나 빼서 새로운 날짜를 반환합니다.
예를 들어, 오늘 날짜에서 7일 뒤의 날짜를 구하거나 3개월 전 날짜를 계산할 수 있습니다.
DATEADD 함수의 기본 문법은 다음과 같습니다.
DATEADD(datepart, number, date)
여기서 datepart는 계산 단위(예: day, month, year, hour 등),
number는 더하거나 뺄 수치,
date는 기준 날짜를 의미합니다.
-- 현재 날짜에서 7일 더하기
SELECT DATEADD(day, 7, GETDATE()) AS SevenDaysLater;
-- 현재 날짜에서 3개월 빼기
SELECT DATEADD(month, -3, GETDATE()) AS ThreeMonthsAgo;
💎 핵심 포인트:
DATEADD는 일, 월, 년뿐만 아니라 시간, 분, 초 단위 계산까지 가능하므로 예약 시스템, 기간 제한, 데이터 분석 등에 폭넓게 쓰입니다.
주의할 점은, DATEADD로 계산한 값은 항상 datetime 형식으로 반환된다는 것입니다.
또한, 잘못된 datepart 값을 사용하면 오류가 발생하므로 공식 문서에서 지원하는 단위를 확인하는 것이 좋습니다.
- ➕기간 추가 → DATEADD(day, 10, GETDATE())
- ➖기간 빼기 → DATEADD(month, -2, GETDATE())
- ⚠️지원하는 datepart 값만 사용
📏 DATEDIFF로 두 날짜 간의 차이 계산하기
MSSQL에서 DATEDIFF() 함수는 두 날짜 사이의 간격을 계산할 때 사용됩니다.
이 함수는 특정 단위(일, 월, 년, 시, 분 등)를 기준으로 두 시각의 차이를 정수 값으로 반환합니다.
예를 들어, 프로젝트 시작일과 마감일 사이의 일수를 계산하거나, 회원 가입일로부터 몇 개월이 지났는지를 구하는 데 유용합니다.
DATEDIFF 함수의 기본 문법은 다음과 같습니다.
DATEDIFF(datepart, startdate, enddate)
여기서 datepart는 비교 단위,
startdate는 시작 날짜,
enddate는 종료 날짜입니다.
-- 두 날짜 간 일수 계산
SELECT DATEDIFF(day, '2025-01-01', GETDATE()) AS DaysPassed;
-- 가입일로부터 경과한 개월 수
SELECT DATEDIFF(month, '2024-05-15', GETDATE()) AS MonthsPassed;
💎 핵심 포인트:
DATEDIFF는 두 날짜의 ‘차이’만 계산하므로, 시간대(Time Zone)나 서머타임(DST) 변화를 고려한 정밀 계산에는 주의해야 합니다.
DATEDIFF 결과는 항상 정수로 반환되며, 계산 단위보다 작은 값은 버려집니다.
예를 들어, 두 날짜가 1일 23시간 차이라도 datepart가 day이면 1일로 계산됩니다.
시간 단위까지 필요하다면 hour 또는 minute를 사용하세요.
- 📅일 단위 차이 계산 → DATEDIFF(day, 시작일, 종료일)
- 🕐시간 단위 차이 계산 → DATEDIFF(hour, 시작일, 종료일)
- ⚠️단위보다 작은 값은 버려짐
🎨 FORMAT 함수로 날짜 출력 형식 변경하기
MSSQL에서 FORMAT() 함수는 날짜와 시간을 원하는 문자열 형식으로 변환할 수 있게 해줍니다.
이 기능을 사용하면 보고서나 사용자 화면에 날짜를 보다 직관적이고 가독성 좋게 표시할 수 있습니다.
예를 들어, 2025-08-10이라는 날짜를 ‘2025년 8월 10일’ 또는 ‘08/10/2025’와 같은 형식으로 바꿀 수 있습니다.
FORMAT 함수의 기본 문법은 다음과 같습니다.
FORMAT(value, format [, culture])
여기서 value는 변환할 날짜나 숫자,
format은 표시 형식,
culture는 선택 사항으로 언어 및 지역 정보를 지정합니다.
-- 기본 날짜 형식 변경
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd') AS FormattedDate;
-- 한국어 날짜 형식
SELECT FORMAT(GETDATE(), 'yyyy년 MM월 dd일', 'ko-KR') AS KoreanDate;
-- 미국 문화권 형식
SELECT FORMAT(GETDATE(), 'MM/dd/yyyy', 'en-US') AS USDate;
💎 핵심 포인트:
FORMAT 함수는 가독성 높은 출력이 가능하지만, 대량 데이터 처리 시 성능 저하가 발생할 수 있으므로 조회 전용 화면에서 주로 사용하는 것이 좋습니다.
FORMAT은 SQL Server 2012 이상 버전에서만 지원되며, 다양한 문화권 형식을 지원하므로 다국어 서비스나 글로벌 리포트 작성에 특히 유용합니다.
단, 날짜 연산에는 적합하지 않고, 변환된 값은 문자열이므로 다시 날짜 연산을 하려면 CAST 또는 CONVERT를 사용해야 합니다.
- 🎯출력 형식 지정 → FORMAT(GETDATE(), ‘yyyy-MM-dd’)
- 🌏문화권 지정 → FORMAT(GETDATE(), ‘MM/dd/yyyy’, ‘en-US’)
- ⚠️대량 데이터 처리 시 성능 주의
💡 날짜 함수 활용 시 유용한 팁과 주의사항
MSSQL의 날짜/시간 함수들은 각각의 용도가 뚜렷하고 강력하지만, 잘못 사용하면 성능 저하나 의도치 않은 결과를 초래할 수 있습니다.
특히 대규모 데이터셋을 처리하거나, 전 세계 사용자에게 서비스를 제공하는 환경에서는 더욱 세심한 주의가 필요합니다.
⚡ 성능 최적화 팁
WHERE 절에서 날짜 함수를 직접 사용하는 경우, 인덱스가 제대로 활용되지 않아 쿼리 속도가 크게 떨어질 수 있습니다.
이럴 땐, 함수 결과를 비교하는 대신 미리 계산된 날짜 값을 변수나 파라미터로 처리하는 방식이 좋습니다.
-- 비효율적인 방법 (인덱스 미사용 가능성 높음)
SELECT * FROM Orders
WHERE DATEADD(day, 7, OrderDate) < GETDATE();
-- 효율적인 방법
DECLARE @TargetDate DATETIME = DATEADD(day, -7, GETDATE());
SELECT * FROM Orders
WHERE OrderDate < @TargetDate;
🌐 시간대와 국제화 고려
전 세계 사용자를 대상으로 하는 서비스에서는 서버 시간과 사용자 현지 시간 간의 차이를 고려해야 합니다.
UTC 기반 함수(GETUTCDATE())를 사용하거나, 애플리케이션 단에서 시간 변환 로직을 구현하는 것이 안전합니다.
💎 핵심 포인트:
인덱스를 유지하고 국제 서비스를 안정적으로 운영하려면, 날짜 함수는 계산용과 표시용을 명확히 구분해 사용하세요.
🛠️ 디버깅과 테스트
날짜 계산 로직은 환경에 따라 다르게 동작할 수 있으므로, 배포 전에 다양한 테스트 케이스를 검증해야 합니다.
특히 월말, 윤년, 서머타임 변화 시점 등의 특수 상황을 체크하는 것이 중요합니다.
- 📌WHERE 절에 직접 날짜 함수 사용 최소화
- 🌏UTC 시간 기반 처리 고려
- 🧪윤년, 월말, DST 등 특수 상황 테스트
❓ 자주 묻는 질문 (FAQ)
GETDATE()와 SYSDATETIME()의 차이는 무엇인가요?
DATEADD와 DATEDIFF를 함께 사용할 수 있나요?
FORMAT 함수 대신 CONVERT를 써도 되나요?
UTC 시간을 저장하는 것이 좋은가요?
날짜 차이를 초 단위로 계산할 수 있나요?
GETDATE() 값이 캐싱되는 경우가 있나요?
FORMAT 함수의 성능이 느린 이유는 무엇인가요?
DATEADD에서 소수 단위 값을 넣으면 어떻게 되나요?
🗂️ MSSQL 날짜 함수로 더 똑똑한 데이터 처리하기
MSSQL에서 제공하는 GETDATE, DATEADD, DATEDIFF, FORMAT 함수는 단순히 날짜를 불러오거나 표시하는 수준을 넘어, 실무 데이터 처리의 핵심 도구로 활용됩니다.
GETDATE는 현재 시각을 가져와 즉시 사용할 수 있고, DATEADD와 DATEDIFF는 원하는 기간을 계산하거나 비교하는 데 강력합니다.
FORMAT은 다양한 출력 형식을 지원해 사용자 친화적인 데이터 표시를 가능하게 합니다.
이 글에서 소개한 함수들을 적절히 조합하면, 리포트 생성, 통계 분석, 일정 관리, 글로벌 서비스 운영까지 다양한 비즈니스 요구를 만족시킬 수 있습니다.
또한, 성능 최적화와 시간대 고려 같은 주의사항을 함께 적용하면, 안정적이면서 효율적인 데이터베이스 운영이 가능합니다.
🏷️ 관련 태그 : MSSQL, 날짜함수, GETDATE, DATEADD, DATEDIFF, FORMAT, SQL쿼리, 데이터베이스, 시간계산, 출력형식