postgresql - Postgres : first and last days of any month

标签 postgresql date

我在 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/

相关文章:

ruby-on-rails - 将现有的 Rails 列从字符串转换为数组

Django 没有在数据库中存储确切的 UTC 时间

sql - 按列对分组而不考虑它们的顺序

postgresql - Postgres 上的 Activiti 5.18.0 不会使用该模式

php - 在 php 中使用 foreach 无法正确显示字符串格式的所有月份

java - 不允许用户通过更改系统日期来更新回溯日期的表

python - 将 Pandas 日期列转换为天

SQL:如何限制第一个与条件匹配的连接?

java - 运行两个连续的 java 测试时出现 Elasticsearch NumberFormatException

mysql - 使用 10-OCT-15 格式的日期查询 MYSQL