首页 > 解决方案 > 减去日期时使用 CTE 的 Postgres SQL

问题描述

我试图根据 cte_film 中 select 语句的整数结果减去当前日期。但是,将 select 语句放在 select now() 间隔内会给我带来问题。

WITH cte_film AS (
SELECT configvalue from TRAC.configvalues con where configcd = 'processingday'
),
cte_filma AS
(SELECT now() - (select configvalue from cte_film) * INTERVAL '1 day')
SELECT * from cte_filma;

错误:运算符不存在:字符变化 * 间隔
第 5 行:...SELECT now() - (select configvalue from cte_film) * INTERVAL... ^ 提示:没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。

标签: sqlpostgresql

解决方案


我可能会过度简化您的问题,但据我了解,您根本不需要 a CTE。尝试这个:

SELECT now() - configvalue
FROM trac.configvalues 
WHERE configcd = 'processingday'

如果您不需要时间,请使用current_date而不是now(). 看到不同:

SELECT current_date - 1, now() - '1 day'::INTERVAL;

  ?column?  |           ?column?            
------------+-------------------------------
 2020-03-11 | 2020-03-11 16:23:56.384132+01
(1 Zeile)

推荐阅读