테이블에 bigint로 저장된 날짜가 있으며 30 일보다 오래된 레코드를 선택하려고합니다. 나는이 질문과 관련하여 SO와 Google에 관한 수많은 질문을 보았지만 필요한 것이 무엇인지 찾아 내지 못했습니다. 매우 비효율적 인 것 같다 내가 가지고있는 Heres는 무엇bigint datetimes를 사용하여 X 일보다 오래된 레코드를 선택하십시오.
: 내가 이해에서
SELECT
COUNT(*)
FROM
alert
WHERE
('1969-12-31 19:00:00 GMT'::timestamp + (alert.mytstamp::text)::interval) < (localtimestamp - INTERVAL '30 days')
는, 그것은 30 "일 전"타임 스탬프와 비교하기 위해 타임 스탬프에 BIGINT mytstamp
필드로 변환됩니다. 그것은 테이블의 모든 레코드에 대해 이렇게합니다. (현재 시간 스탬프를 30 일로 변환 한 다음 bigint로 변환하는 것이 더 효율적입니다.)
SQL 기술이 약하지만, 그래서 쉽게 간다 :). 도와 주셔서 감사합니다.
CURRENT_TIMESTAMP와 계산 모두 결정적입니다. PostgreSQL은 한번 계산해야합니다. (CURRENT_TIMESTAMP는 현재 트랜잭션이 시작될 때 서버의 시간입니다.) [기타 시간 함수] (http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT) 다르게 행동하십시오. –