Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgres SQL在减去日期时使用CTE_Sql_Postgresql - Fatal编程技术网

Postgres SQL在减去日期时使用CTE

Postgres SQL在减去日期时使用CTE,sql,postgresql,Sql,Postgresql,我试图根据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 da

我试图根据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行:…立即选择-从cte_胶片中选择配置值* 间隔 ^提示:没有与给定名称和参数类型匹配的运算符。你 可能需要添加显式类型转换


按以下方式更改您的第二个CTE:

WITH 
  cte_film AS (
    SELECT configvalue 
    FROM TRAC.configvalues
    WHERE configcd = 'processingday'
  ),
  cte_filma AS (
    SELECT now() - configvalue::int  * INTERVAL '1 day'::interval
    FROM cte_film
  )
SELECT * FROM cte_filma;

按以下方式更改您的第二个CTE:

WITH 
  cte_film AS (
    SELECT configvalue 
    FROM TRAC.configvalues
    WHERE configcd = 'processingday'
  ),
  cte_filma AS (
    SELECT now() - configvalue::int  * INTERVAL '1 day'::interval
    FROM cte_film
  )
SELECT * FROM cte_filma;

我可能过分简化了你的问题,但据我所知,你根本不需要CTE。试试这个:

SELECT now() - configvalue
FROM trac.configvalues 
WHERE configcd = 'processingday'
如果您不需要时间,请使用当前日期而不是现在。请看区别:

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

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

我可能过分简化了你的问题,但据我所知,你根本不需要CTE。试试这个:

SELECT now() - configvalue
FROM trac.configvalues 
WHERE configcd = 'processingday'
如果您不需要时间,请使用当前日期而不是现在。请看区别:

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

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

谢谢你的意见。我能用计算机解决这个问题 cte_filma作为“立即选择”-间隔“1天”配置来自cte_film的值


谢谢你的意见。我能用计算机解决这个问题 cte_filma作为“立即选择”-间隔“1天”配置来自cte_film的值


你能详细说明一下这个问题吗?我想根据cte_film中select语句的整数结果减去当前日期。你试过了吗?从trac.configvalues con中选择CURRENT_DATE-configvalue,其中configcd='processingday'到sutract一天您可以使用,例如,CURRENT_DATE-1或带有日期列configvalue-1如果将第二个CTE作为CTE_filma编写为SELECT now-INTERVAL'1天'*CTE_Film中的configvalue,则第二个CTE可能更清晰。您可以详细说明一下这个问题吗?我正在尝试根据CTE_Film中SELECT语句的整数结果减去当前日期。您尝试过吗?从trac.configvalues con中选择CURRENT_DATE-configvalue,其中configcd='processingday'到sutract一天您可以使用,例如,当前日期-1或带有日期列configvalue-1如果将第二个CTE作为CTE\u filma写入“立即选择”-间隔“1天”*CTE\u filmconfigvalue中的configvalue*间隔“1天”::间隔可以进一步简化为间隔天=>configvalueconfigvalue*间隔“1天”::间隔可以进一步简化为如果您不需要时间,请考虑使用CurrnGyDATE—1。检查我的答案和@ AyHORSESY,没有名字的建议。这个解决方案太复杂了,如果你不需要时间,考虑使用CurrnEngEd- 1。请检查我的答案和@a_horse_与_no_name的建议。此解决方案太复杂了。Hello,我在尝试此解决方案时遇到以下错误。错误:运算符不存在:字符变化*间隔行8:立即选择-配置值*间隔“1天”::间隔^HINT:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。configvalue不是整数吗?您好,我在尝试此操作时遇到以下错误。错误:运算符不存在:字符变化*间隔行8:立即选择-配置值*间隔“1天”::间隔^HINT:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。configvalue不是整数吗?