Postgresql 间隔';0天';和';0天';::赛后间歇期

Postgresql 间隔';0天';和';0天';::赛后间歇期,postgresql,Postgresql,我试图使用循环在psql中创建一个包含日期列表的基本表。代码如下所示 DO $$ DECLARE counter INTEGER :=0; date_interval VARCHAR(250) :='0 DAYS'; BEGIN DROP TABLE IF EXISTS temp_dates; CREATE TABLE temp_dates ( date DATE ); WHILE counter < 12 LOOP date

我试图使用循环在psql中创建一个包含日期列表的基本表。代码如下所示

DO $$

DECLARE counter       INTEGER :=0;
    date_interval VARCHAR(250) :='0 DAYS';

BEGIN


  DROP TABLE IF EXISTS temp_dates;
  CREATE TABLE temp_dates (
    date DATE
  );

  WHILE counter < 12 LOOP

    date_interval := counter || ' DAYS';

    INSERT INTO temp_dates
    --SELECT DATE_TRUNC('DAYS', CURRENT_DATE) - date_interval :: INTERVAL;
      SELECT (DATE_TRUNC('DAYS', CURRENT_DATE)) - (INTERVAL date_interval);

    counter := counter + 1;
END LOOP;

END $$;
工作。但以下方法不起作用

SELECT (DATE_TRUNC('DAYS', CURRENT_DATE)) - (INTERVAL date_interval);
基本上唯一的区别是日期间隔::间隔与间隔日期间隔

但是,当我直接执行间隔“2天”之类的操作时,它是有效的,但当我使用变量时,它会失败

所以我的问题是双重的

  • 间隔“2天”和“2天”之间有什么区别::间隔。据我所知,两人都在打字
  • 为什么间隔“2天”有效,但在使用变量时失败
  • 我确信我在逃避引号时遗漏了一些相当明显的东西,但我不确定。任何帮助都将不胜感激

    如前所述,语法

    INTERVAL '0 days'
    
    表示常量,也就是说,字符串必须是文本

    它不是类型转换的语法,例如
    '0 days'::interval
    ,它允许您更改任意表达式的类型

    INTERVAL '0 days'