我在 postgres 中有两个日期列:“StartDate”和“EndDate”。 我需要使用不同的代码分配日期范围的各种组合。 例如 IF 开始日期 = 结束日期 THEN 'a'
我想要做的是选择其中 StartDate 是任何月份的第一天并且 EndDate 是任何月份的最后一天的任何行。 (如果开始日期 = FirstDayOfMonth AND EndDate = LastDayOfMonth THEN 'b')。
例如当 StartDate = '01-02-2011' 且 EndDate = '31-05'2012' 时,则为 'b',或者 StartDate = '01-11-1996' 且 EndDate = '31-01-2001' 时,则为 'b'。
最佳答案
获取一个月的第一天和最后一天最简单的方法是依靠日期算术,例如:
# select date_trunc('month', now()::date);
date_trunc
------------------------
2014-12-01 00:00:00+01
(1 row)
# select date_trunc('month', now()::date)
+ interval '1 month'
- interval '1 day';
?column?
------------------------
2014-12-31 00:00:00+01
(1 row)
如果需要,请注意,您可以使用 generate_series()
来计算两个日期之间的完整列表:
select d as first_day,
d + interval '1 month' - interval '1 day' as last_day
from generate_series('2014-01-01'::date,
'2014-12-01'::date,
'1 month') as d;
first_day | last_day
------------------------+------------------------
2014-01-01 00:00:00+01 | 2014-01-31 00:00:00+01
2014-02-01 00:00:00+01 | 2014-02-28 00:00:00+01
2014-03-01 00:00:00+01 | 2014-03-31 00:00:00+02
2014-04-01 00:00:00+02 | 2014-04-30 00:00:00+02
2014-05-01 00:00:00+02 | 2014-05-31 00:00:00+02
2014-06-01 00:00:00+02 | 2014-06-30 00:00:00+02
2014-07-01 00:00:00+02 | 2014-07-31 00:00:00+02
2014-08-01 00:00:00+02 | 2014-08-31 00:00:00+02
2014-09-01 00:00:00+02 | 2014-09-30 00:00:00+02
2014-10-01 00:00:00+02 | 2014-10-31 00:00:00+01
2014-11-01 00:00:00+01 | 2014-11-30 00:00:00+01
2014-12-01 00:00:00+01 | 2014-12-31 00:00:00+01
(12 rows)
关于postgresql - Postgres : first and last days of any month,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27360503/