代码之家  ›  专栏  ›  技术社区  ›  Daryn

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

  •  -1
  • Daryn  · 技术社区  · 6 年前

    是否可以将PostgreSQL中的字符串“201701”转换为日期“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 回复  |  直到 6 年前
        1
  •  4
  •   Tim Biegeleisen    6 年前

    您可以使用 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

        2
  •  0
  •   ANANTH ADHIKARLA    6 年前

    蒂姆·比盖莱森的上述回答是可行的,但这里有一个替代方案。

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

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

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


    (编辑)

    您也可以使用PostgreSQL中的date_trunc。它和上面的一样。

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

    Code Example Live Demo