날짜 범위 간의 postgresql 쿼리
날짜가 특정 월과 연도인 경우 결과를 반환하기 위해 postgresql db를 쿼리하려고 합니다.즉, 한 달 동안의 모든 값을 원합니다.
제가 지금까지 할 수 있었던 유일한 방법은 다음과 같습니다.
SELECT user_id
FROM user_logs
WHERE login_date BETWEEN '2014-02-01' AND '2014-02-28'
문제는 표를 조회하기 전에 첫 번째 날짜와 마지막 날짜를 계산해야 한다는 것입니다.이것을 하는 더 간단한 방법이 있습니까?
감사해요.
날짜(및 시간)와 함께 사용하면 많은 것이 단순해집니다.>= start AND < end
.
예:
SELECT
user_id
FROM
user_logs
WHERE
login_date >= '2014-02-01'
AND login_date < '2014-03-01'
이 경우에도 필요한 달의 시작 날짜를 계산해야 하지만 여러 가지 방법으로 쉽게 계산할 수 있습니다.
종료 날짜도 단순화됩니다. 정확히 한 달만 추가하면 됩니다.28일, 30일, 31일 등을 가지고 장난치지 마세요.
이 구조는 인덱스 사용을 유지할 수 있다는 장점도 있습니다.
많은 사용자가 다음과 같은 양식을 제안할 수 있지만 인덱스를 사용하지 않습니다.
WHERE
DATEPART('year', login_date) = 2014
AND DATEPART('month', login_date) = 2
여기에는 테이블의 모든 단일 행(스캔)에 대한 조건을 계산하고 인덱스를 사용하여 일치할 행 범위(범위 검색)를 찾지 않는 작업이 포함됩니다.
포스투레에서SQL 9.2 범위 유형이 지원됩니다.따라서 다음과 같이 쓸 수 있습니다.
SELECT user_id
FROM user_logs
WHERE '[2014-02-01, 2014-03-01]'::daterange @> login_date
이것은 문자열 비교보다 더 효율적이어야 합니다.
누군가가 여기에 착륙할 경우를 대비해서...8.1 이후에는 간단하게 다음을 사용할 수 있습니다.
SELECT user_id
FROM user_logs
WHERE login_date BETWEEN SYMMETRIC '2014-02-01' AND '2014-02-28'
문서에서:
BETH 대칭은 BETHIN과 동일합니다. 단, 왼쪽에 있는 인수가 오른쪽에 있는 인수보다 작거나 같아야 한다는 요구 사항은 없습니다.그렇지 않으면 두 인수가 자동으로 스왑되므로 항상 비어 있지 않은 범위가 암시됩니다.
SELECT user_id
FROM user_logs
WHERE login_date BETWEEN '2014-02-01' AND '2014-03-01'
날짜에 대해 Between 키워드가 예외적으로 작동합니다.날짜에 대한 시간을 00:00:00(즉, 자정)으로 가정합니다.
설명서를 읽습니다.
http://www.postgresql.org/docs/9.1/static/functions-datetime.html
다음과 같은 쿼리를 사용했습니다.
WHERE
(
date_trunc('day',table1.date_eval) = '2015-02-09'
)
또는
WHERE(date_trunc('day',table1.date_eval) >='2015-02-09'AND date_trunc('day',table1.date_eval) <'2015-02-09')
언급URL : https://stackoverflow.com/questions/23335970/postgresql-query-between-date-ranges
'programing' 카테고리의 다른 글
VBA의 멀티스레딩 (0) | 2023.05.07 |
---|---|
.translate()를 사용하여 Python 3.x의 문자열에서 구두점을 제거하는 방법은 무엇입니까? (0) | 2023.05.07 |
python3.3에서 docx를 가져올 때ImportError 오류가 발생했습니다. 'exceptions'라는 이름의 모듈이 없습니다. (0) | 2023.05.07 |
try {return x; } 마지막으로 {x = null; } 문에서 실제로 어떤 일이 발생합니까? (0) | 2023.05.07 |
"는 " "의 대체어입니까? (0) | 2023.05.07 |