PostgreSQL将月份字符串转换为月份的开始和结束日期

时间:2018-08-06 02:25:01

标签: sql postgresql

是否可以转换例如字符串“ 201701”在PostgreSQL中的日期为“ 2017-01-01”和“ 2017-01-31”?

因此:

"201701" get '2017-01-01' and '2017-01-31'
"201702" get '2017-02-01' and '2017-02-28'
"201703" get '2017-03-01' and '2017-02-31'

2 个答案:

答案 0 :(得分:4)

您可以使用TO_DATE函数,并使用字符串串联来附加day组件,如下所示:

SELECT
    TO_DATE('201702' || '01', 'YYYYMMDD') AS first,
    (TO_DATE('201702' || '01', 'YYYYMMDD') + INTERVAL '1 month') -
        INTERVAL '1 day' AS last;

上面的技巧只是将01添加到本月的第一天。对于同月的最后一天,它会在第一个月的第一天加上一个月,以获取下个月的第一个月,然后回滚一天以获取当月的最后一天。 >

enter image description here

Demo

答案 1 :(得分:0)

Tim Biegeleisen的上述回答有效,但这是另一种选择。

to_date()函数将字符串文字转换为日期值。

示例用法是:to_date(text,format);

SELECT to_date('201701','YYYYMMDD');


(已编辑)

您还可以使用date_trunc,它是PostgreSQL的一部分。与上面的操作相同。

select date_trunc('month', current_date) , date_trunc('month', CURRENT_DATE) + interval '1 month - 1 day';

Code Example Live Demo