【发布时间】:2021-06-17 01:25:24
【问题描述】:
我在 PostgreSQL 中有一个调查表。我想查找自本赛季开始以来所做的所有调查。 我是这样写的:
WITH foo
AS (
SELECT
-- This case will find the date of the first day of this season
-- Year is selected based on the current date. This way we can use the same code next year.
-- ** finding the start of the season.
CASE
WHEN EXTRACT('month' FROM NOW()) >= 1 AND EXTRACT('month' FROM NOW()) < 4
THEN TO_TIMESTAMP( EXTRACT('year' FROM NOW())||'-01-01 01:00:00', 'YYYY-MM-DD HH:MI:SS')
WHEN EXTRACT('month' FROM NOW()) >= 4 AND EXTRACT('month' FROM NOW()) < 7
THEN TO_TIMESTAMP( EXTRACT('year' FROM NOW())||'-04-01 01:00:00', 'YYYY-MM-DD HH:MI:SS')
WHEN EXTRACT('month' FROM NOW()) >= 7 AND EXTRACT('month' FROM NOW()) < 9
THEN TO_TIMESTAMP( EXTRACT('year' FROM NOW())||'-07-01 01:00:00', 'YYYY-MM-DD HH:MI:SS')
WHEN EXTRACT('month' FROM NOW()) >= 10 AND EXTRACT('month' FROM NOW()) < 13
THEN TO_TIMESTAMP( EXTRACT('year' FROM NOW())||'-10-01 01:00:00', 'YYYY-MM-DD HH:MI:SS')
END start_season
)
SELECT *
FROM foo f,
my_table t
WHERE date_survey > start_season
此解决方案有效。但是,如果存在,我正在寻找更简单的解决方案。
【问题讨论】:
标签: sql postgresql date datetime