PostgreSQL은 강력한 관계형 데이터베이스 관리 시스템으로, 다양한 쿼리 기능을 제공합니다.
데이터 분석이나 일일 보고서를 작성할 때, "현재 시각 기준으로 하루 전 데이터를 조회하는" 작업은
자주 발생할 수 있습니다.
이 글에서는 PostgreSQL에서 하루 전의 데이터를 조회하는 방법을 상세히 설명하고,
이를 활용한 쿼리 작성법을 알아보겠습니다.

1. PostgreSQL에서 날짜 및 시간 데이터 다루기
PostgreSQL에서 날짜와 시간을 다루는 데 필요한 핵심 개념은 CURRENT_TIMESTAMP와 INTERVAL**입니다. 이를 활용하면 원하는 시간 범위의 데이터를 쉽게 조회할 수 있습니다.
1.1 CURRENT_TIMESTAMP와 INTERVAL
- CURRENT_TIMESTAMP: 현재 날짜와 시간을 반환합니다. 예를 들어, 2025년 3월 10일 오후 2시 30분이라면 CURRENT_TIMESTAMP는 2025-03-10 14:30:00 값을 반환합니다.
- INTERVAL: 일정 기간을 나타내는 데이터 타입으로, 이를 통해 날짜와 시간을 계산할 수 있습니다. 예를 들어, 하루 전을 나타내는 INTERVAL '1 day'는 24시간을 의미합니다.
2. PostgreSQL에서 하루 전 데이터 조회하는 방법
2.1 현재 시각을 기준으로 하루 전 데이터 조회하기
PostgreSQL에서 현재 시각을 기준으로 하루 전 데이터를 조회하려면 CURRENT_TIMESTAMP와 INTERVAL을 사용합니다. 아래는 하루 전 데이터를 조회하는 기본적인 쿼리 예시입니다.
SELECT *
FROM your_table
WHERE your_date_column >= CURRENT_TIMESTAMP - INTERVAL '1 day';
이 쿼리의 동작 원리는 다음과 같습니다:
- CURRENT_TIMESTAMP는 현재 날짜와 시간을 반환합니다.
- INTERVAL '1 day'는 1일을 나타내는 간격을 지정합니다.
- your_date_column은 날짜와 시간 정보가 저장된 열입니다.
이 쿼리는 your_date_column의 값이 현재 시각에서 하루 전 이상인 모든 행을 조회합니다.
2.2 날짜만 기준으로 하루 전 데이터 조회하기
만약 your_date_column이 날짜만 저장하고 시간 정보가 없는 열이라면, CURRENT_DATE를 사용하여 날짜 부분만 비교할 수 있습니다. CURRENT_DATE는 현재 날짜를 반환하며, 시간 정보는 제외됩니다.
SELECT *
FROM your_table
WHERE your_date_column >= CURRENT_DATE - INTERVAL '1 day';
여기서:
- CURRENT_DATE는 현재 날짜(시간 제외)를 반환합니다.
- INTERVAL '1 day'는 하루 전 날짜를 의미합니다.
이 쿼리는 your_date_column이 하루 전 날짜부터 현재 날짜까지 포함하는 데이터를 조회합니다.
2.3 특정 시간 기준으로 하루 전 데이터 조회하기
특정 시간대를 기준으로 하루 전의 데이터를 조회하고 싶다면, DATE_TRUNC 함수를 사용할 수 있습니다. DATE_TRUNC 함수는 주어진 날짜와 시간의 일부를 제거하여 특정 시간 단위로 자를 수 있습니다.
SELECT *
FROM your_table
WHERE your_date_column >= DATE_TRUNC('day', CURRENT_TIMESTAMP) - INTERVAL '1 day';
이 쿼리에서:
- DATE_TRUNC('day', CURRENT_TIMESTAMP)는 현재 시각을 기준으로 오늘 00:00:00을 반환합니다. 즉, 오늘 날짜의 시작 시각으로 트렁크 처리합니다.
- INTERVAL '1 day'는 하루 전 날짜로 이동합니다.
따라서 이 쿼리는 오늘 날짜의 00:00:00을 기준으로 하루 전 데이터를 조회합니다.
3. 활용 예시: 일일 리포트 작성
일일 리포트나 배치 작업을 진행할 때, 하루 전 데이터를 조회하는 작업은 매우 유용합니다. 예를 들어, 최근 하루 동안 발생한 로그인 데이터를 조회한다고 가정해 보겠습니다. 이를 위해서는 login_timestamp라는 열에 저장된 데이터에서 현재 시각 기준으로 하루 전 데이터를 조회하는 쿼리를 작성할 수 있습니다.
SELECT user_id, login_timestamp
FROM user_logins
WHERE login_timestamp >= CURRENT_TIMESTAMP - INTERVAL '1 day';
이 쿼리는 최근 24시간 이내에 로그인한 사용자의 ID와 로그인 시간을 반환합니다.
4. 자주 발생하는 질문과 해결 방법
4.1 시간대(Timezone)가 다른 경우 어떻게 처리할까요?
PostgreSQL에서 시간대(timezone)가 다를 수 있는 경우, AT TIME ZONE을 사용하여 시간을 변환할 수 있습니다. 예를 들어, UTC 시간을 기준으로 작업하는 경우 다음과 같이 변환할 수 있습니다.
SELECT *
FROM your_table
WHERE your_date_column >= (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') - INTERVAL '1 day';
이렇게 하면 UTC 시간대에서 하루 전 데이터를 정확하게 조회할 수 있습니다.
4.2 특정 날짜 범위 내 데이터를 조회하려면 어떻게 하나요?
특정 날짜 범위 내 데이터를 조회하려면 BETWEEN을 사용할 수 있습니다. 예를 들어, 2025년 3월 9일부터 3월 10일 사이의 데이터를 조회하고 싶다면 다음과 같이 작성할 수 있습니다.
SELECT *
FROM your_table
WHERE your_date_column BETWEEN '2025-03-09' AND '2025-03-10';
이 쿼리는 지정된 날짜 범위 내의 데이터를 모두 반환합니다.
5. PostgreSQL에서 날짜 및 시간 데이터 조회 최적화 방법
PostgreSQL에서 날짜와 시간을 기준으로 데이터를 조회할 때 성능이 중요한 경우, 날짜/시간 열에 인덱스를 생성하는 것이 좋습니다. 이를 통해 쿼리 성능을 크게 향상시킬 수 있습니다.
CREATE INDEX idx_your_date_column ON your_table(your_date_column);
이 인덱스를 생성하면 your_date_column을 기준으로 빠르게 데이터를 조회할 수 있습니다.
6. 실습 예제
SELECT NOW()- INTERVAL '1 DAYS'
또는
SELECT current_timestamp - INTERVAL '1 DAY'
now()와 current_timestamp는 같은 의미입니다.
응용)
한달 전 :
select NOW() - interval '1 months'
일년 전 :
select NOW() - interval '1 years'
PostgreSQL에서 현재 시각을 기준으로 하루 전 데이터를 조회하는 방법은 매우 간단하면서도 강력한 기능입니다. CURRENT_TIMESTAMP와 INTERVAL을 적절히 활용하면 다양한 시간 범위에 맞는 데이터를 효율적으로 조회할 수 있습니다. 또한, 시간대나 날짜 범위에 맞게 쿼리를 조정하고, 성능을 최적화할 수 있는 방법도 고려해야 합니다.
이 글에서 다룬 쿼리 예시와 설명을 바탕으로 PostgreSQL에서 날짜 및 시간 관련 데이터를 다루는 작업을 보다 효과적으로 수행할 수 있을 것입니다.
'스마트웹앱콘텐츠전문가 > 데이터베이스' 카테고리의 다른 글
[PostgreSQL]GROUP BY JSON (0) | 2021.12.07 |
---|---|
[PostgreSQL]있으면 UPDATE, 없으면 INSERT (0) | 2021.11.24 |
[postgresql]대소문자구분없이조회 (0) | 2021.06.14 |
[마이바티스] FetchSize (0) | 2021.05.10 |
[MariaDB]Interger to Boolean (0) | 2021.03.16 |