소개
PostgreSQL을 비롯한 SQL 데이터베이스를 다룰 때 날짜와 시간 데이터를 조작하고 쿼리하는 건 기본기예요. 애플리케이션에서는 주말을 제외하고 평일에만 초점을 맞춘 분석이나 리포트가 필요한 경우가 많아요. 이 튜토리얼에서는 PostgreSQL의 날짜 및 시간 함수를 활용해 평일 레코드만 조회하는 방법을 자세히 알아볼게요.
PostgreSQL의 날짜와 시간 이해하기
PostgreSQL은 날짜와 시간을 다루는 풍부한 함수와 연산자를 제공해서, 평일 기준으로 행을 조회하는 것 같은 복잡한 쿼리도 간단하게 작성할 수 있어요.
날짜/시간 데이터 타입
평일 쿼리를 살펴보기 전에 PostgreSQL의 주요 날짜/시간 데이터 타입을 알아두면 좋아요:
-
DATE: 날짜(연, 월, 일)용. -
TIMESTAMP: 시간대 없는 날짜와 시간용. -
TIMESTAMPTZ: 시간대가 있는 날짜와 시간용. -
TIME: 시간대 없는 시간 전용. -
TIMETZ: 시간대가 있는 시간 전용.
EXTRACT 함수
평일을 다룰 때 핵심이 되는 함수는 EXTRACT예요. 날짜/시간 값에서 요일 같은 특정 부분을 추출할 수 있어요.
평일만 쿼리하기
평일(월요일~금요일)에 해당하는 레코드를 조회하려면 EXTRACT 함수로 날짜에서 요일을 가져오면 돼요. 이때 일요일은 0, 토요일은 6이에요.
기본적인 평일 조회
평일만 포함하도록 행을 필터링하는 방법은 다음과 같아요:
-- Assuming a table 'events' with a 'date' column
SELECT *
FROM events
WHERE EXTRACT(DOW FROM date) BETWEEN 1 AND 5;
이 쿼리는 events 테이블에서 date 컬럼의 요일이 1(월요일)부터 5(금요일) 사이인 행을 조회해요.
출력:
| id | date | event_name |
|---|---|---|
| 1 | 2024-03-04 | Project Launch |
| 2 | 2024-03-05 | Team Meeting |
복잡한 시나리오: 테이블 조인과 평일 필터링
테이블을 조인하면서도 평일로 필터링해야 하는 좀 더 복잡한 예제를 살펴볼게요.
-- Assuming another table 'event_details' that references 'events'
SELECT e.*, ed.detail
FROM events e
JOIN event_details ed ON e.id = ed.event_id
WHERE EXTRACT(DOW FROM e.date) BETWEEN 1 AND 5;
이 쿼리는 이벤트를 평일로 필터링할 뿐 아니라 event_details 테이블과 조인해서 관련 데이터도 가져와요.
출력:
| id | date | event_name | detail |
|---|---|---|---|
| 1 | 2024-03-04 | Project Launch | Kick-off meeting |
| 2 | 2024-03-05 | Team Meeting | Monthly review |
활용 사례
근무 시간 분석
근무 시간을 추적하는 기업이라면 주말을 제외해서 생산성과 인건비에 대한 인사이트를 얻을 수 있어요.
-- Assuming a table 'work_hours' with 'employee_id', 'date', and 'hours_worked'
SELECT employee_id, SUM(hours_worked) AS total_hours
FROM work_hours
WHERE EXTRACT(DOW FROM date) BETWEEN 1 AND 5
GROUP BY employee_id;
이 쿼리는 직원별로 평일 동안 일한 총 시간을 계산해요.
출력:
| employee_id | total_hours |
|---|---|
| 101 | 40 |
| 102 | 38 |
이벤트 기획
이벤트 기획자라면 평일에 초점을 맞춰 이벤트를 더 효율적으로 구성하고 일정을 잡을 수 있어요.
-- Finding available event dates during weekdays
SELECT date
FROM events
WHERE EXTRACT(DOW FROM date) BETWEEN 1 AND 5
AND date > CURRENT_DATE
ORDER BY date;
이렇게 하면 향후 이벤트 기획을 위해 다가오는 평일 날짜를 파악할 수 있어요.
출력:
| date |
|---|
| 2024-03-06 |
| 2024-03-07 |
결론
PostgreSQL에서 평일 기준으로 레코드를 조회하는 건 데이터 분석과 애플리케이션 로직에 유용한 기법이에요. PostgreSQL의 날짜 및 시간 함수, 특히 EXTRACT를 활용하면 필요에 맞게 데이터를 쉽게 필터링할 수 있어요. 비즈니스 운영을 분석하든, 이벤트를 기획하든, 단순히 일정을 관리하든, 평일을 쿼리하는 방법을 알아두면 데이터베이스 실력이 한층 높아질 거예요.
이 예제들로 연습해 보고, PostgreSQL 문서에서 더 많은 날짜/시간 함수를 살펴보면서 데이터에서 더 많은 인사이트를 얻어 보세요.
즐거운 쿼리 작성 되세요!
Beekeeper Studio는 무료 오픈 소스 데이터베이스 GUI예요
지금까지 써 본 SQL 쿼리 & 에디터 도구 중 최고예요. 데이터베이스 관리에 필요한 모든 게 다 있어요. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio는 빠르고 직관적이며 사용하기 쉬워요. 다양한 데이터베이스를 지원하고 Windows, Mac, Linux에서 모두 잘 작동해요.
Beekeeper Studio 사용자 후기
"Beekeeper Studio가 예전 SQL 워크플로를 완전히 대체했어요. 빠르고 직관적이라 데이터베이스 작업이 다시 즐거워졌어요."
"여러 데이터베이스 GUI를 써봤지만, Beekeeper는 기능과 단순함 사이의 균형이 완벽해요. 그냥 잘 작동해요."