SELECT CONCAT(EXTRACT(MONTH
FROM '{{ date.start }}'::timestamp ),'/',
EXTRACT(YEAR
FROM '{{ date.start }}'::timestamp )) - interval '1' MONTH
运行此查询时出现错误
运行查询时出错:操作符不存在:文本-间隔LINE 25:... FROM'2019-01-01':: timestamp))-间隔... ^提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。
如何解决?
答案 0 :(得分:1)
您需要删除concat()
,因为它会将timstamp变成varchar。
如果您想获取“时间戳”值所在月份的开始,则有更简便的方法:
date_trunc('month', '{{ date.start }}'::timestamp)
结果是一个时间戳,您可以从中减去间隔:
date_trunc('month', '{{ date.start }}'::timestamp) - interval '1 month'
以下示例查询:
with sample_data (input_date) as (
values
(timestamp '2019-01-01 17:18:19'),
(timestamp '2019-02-07 16:30:40'),
(timestamp '2019-03-02 23:30:42')
)
select input_date,
(date_trunc('month', input_date) - interval '1 month')::date as previous_month_start
from sample_data;
返回以下结果:
input_date | previous_month_start
--------------------+---------------------
2019-01-01 17:18:19 | 2018-12-01
2019-02-07 16:30:40 | 2019-01-01
2019-03-02 23:30:42 | 2019-02-01
如果您要以其他格式显示结果,请在结果上应用to_char()
:
to_char(date_trunc('month', input_date) - interval '1 month', 'mm/yyyy')
答案 1 :(得分:0)
从OP中的注释和查询中,我认为您正在尝试将时间戳转换为自定义格式 MM/YYYY
减去1个月的时间间隔。
以下仅仅是实现这一目标的几种方法之一:使用concatenation operator ||
SELECT (extract(month FROM (input_date - interval '1 month')))::text
|| '/'
|| (extract(year FROM (input_date - interval '1 month')))::text
AS formatted_string;