postgresql:如何获取上个月?

时间:2019-06-25 08:39:09

标签: sql postgresql

在我的数据库中,我有date列,其格式类似于2019-04-012019-05-01等。如果是2019-04-01,我想得到{{1 }},当它是2019-03-01时,我需要将2019-01-01作为结果。 我已经进行了一些研究,但没有找到适合我的确切解决方案。 谁能帮我吗?

1 个答案:

答案 0 :(得分:0)

demo:db<>fiddle

您可以使用间隔加/减:

SELECT 
    my_date - interval '1 month'

请注意,该减法给出类型timestamp。当然,这可以转换为date

SELECT 
    (my_date - interval '1 month')::date AS prev_month

上面的解决方案总是减去一个月。因此,如果您有2019-04-04,您将得到2019-03-04。如果要获取上个月的第一天而不考虑当前日期,可以在使用date_trunc()之前将日期剥离到当前月份的第一天:

demo:db<>fiddle

SELECT
    date_trunc('month', my_date)

在给定日期2019-04-01中产生2019-04-05,例如这样一来,您就可以减去一个月以获得上个月的第一个月:

SELECT 
    my_date,
    (date_trunc('month', my_date) - interval '1 month')::date as prev_month
FROM
    my_table