DBGuide

날짜와 시간 함수

📖 약 1🏷 SQL 기초

날짜·시간 타입

타입 설명 예시
DATE 날짜만 2024-01-15
TIME 시간만 14:30:00
TIMESTAMP 날짜 + 시간 2024-01-15 14:30:00
TIMESTAMPTZ 타임존 포함 2024-01-15 14:30:00+09
INTERVAL 기간 3 days, 2 hours

현재 날짜·시간

SELECT
    CURRENT_DATE,        -- 2024-01-15
    CURRENT_TIME,        -- 14:30:00.123456+09
    CURRENT_TIMESTAMP,   -- 2024-01-15 14:30:00.123456+09
    NOW();               -- CURRENT_TIMESTAMP와 동일

날짜 연산

-- 날짜 더하기·빼기
SELECT
    CURRENT_DATE + 7               AS week_later,    -- 7일 후
    CURRENT_DATE - INTERVAL '1 month' AS month_ago,  -- 1개월 전
    '2024-12-31'::date - CURRENT_DATE AS days_until_year_end;
-- 두 날짜의 차이
SELECT
    AGE('2024-12-31', '2024-01-01') AS age_interval,  -- 11 mons 30 days
    '2024-12-31'::date - '2024-01-01'::date AS days_diff; -- 365

날짜 구성 요소 추출

SELECT
    EXTRACT(YEAR  FROM CURRENT_DATE) AS year,
    EXTRACT(MONTH FROM CURRENT_DATE) AS month,
    EXTRACT(DAY   FROM CURRENT_DATE) AS day,
    EXTRACT(DOW   FROM CURRENT_DATE) AS day_of_week, -- 0=일 ~ 6=토
    EXTRACT(WEEK  FROM CURRENT_DATE) AS week_number;

DATE_PART('month', ts)EXTRACT(MONTH FROM ts) 와 동일합니다.

날짜 절사 — DATE_TRUNC

SELECT
    DATE_TRUNC('month', CURRENT_TIMESTAMP),  -- 이번 달 1일 00:00:00
    DATE_TRUNC('year',  CURRENT_TIMESTAMP),  -- 올해 1월 1일 00:00:00
    DATE_TRUNC('hour',  CURRENT_TIMESTAMP);  -- 현재 시간의 정각

날짜 포맷팅

SELECT
    TO_CHAR(CURRENT_DATE, 'YYYY년 MM월 DD일'),  -- '2024년 01월 15일'
    TO_CHAR(NOW(), 'HH24:MI:SS'),               -- '14:30:00'
    TO_DATE('20240115', 'YYYYMMDD');            -- 2024-01-15

실전 예제

-- 이번 달 가입한 사용자
SELECT * FROM users
WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE)
  AND created_at <  DATE_TRUNC('month', CURRENT_DATE) + INTERVAL '1 month';

-- 30일 이내 만료되는 구독
SELECT user_id, expires_at
FROM subscriptions
WHERE expires_at BETWEEN CURRENT_DATE AND CURRENT_DATE + 30;

-- 요일별 주문 수
SELECT
    TO_CHAR(ordered_at, 'Day') AS weekday,
    COUNT(*) AS order_count
FROM orders
GROUP BY EXTRACT(DOW FROM ordered_at), TO_CHAR(ordered_at, 'Day')
ORDER BY EXTRACT(DOW FROM ordered_at);

댓글

... 으로 작성됩니다

댓글을 불러오는 중...