不要将日期值转换为字符串进行比较。始终使用";真实的";日期值。
我需要编写这种代码
BETWEEN '2022-02-01' AND '2022-02-28'
但相对而言,选择上个月的
我试过这种方式
BETWEEN TO_CHAR(current_date - interval '1' month, 'yyyy-mm-01')::date
AND TO_CHAR(TO_CHAR(current_date, 'yyyy-mm-01')::date - interval '1' day, 'yyyy-mm-dd')::date
但我认为可能有更好的解决方案。
要获得上个月的开始,可以使用date_trunc()
和减去区间的组合
上个月的开始是";本月";减去一个月:
date_trunc('month', current_date) - interval '1 month'
上个月底是本月初减去一天:
date_trunc('month', current_date) - interval '1 day'
您没有告诉我们您的列要比较的数据类型,但通常最好使用>=
和<
,而不是between
-,特别是如果该列是timestamp
。
where the_column >= date_trunc('month', current_date) - interval '1 month'
and the_column < date_trunc('month', current_date)