在我的数据库中,我有date
列,其格式类似于2019-04-01
或2019-05-01
等。如果是2019-04-01
,我想得到{{1 }},当它是2019-03-01
时,我需要将2019-01-01
作为结果。
我已经进行了一些研究,但没有找到适合我的确切解决方案。
谁能帮我吗?
答案 0 :(得分:0)
您可以使用间隔加/减:
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()之前将日期剥离到当前月份的第一天:
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