我正在尝试使用循环在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) - date_interval :: INTERVAL;
有效。但是以下方法不起作用
SELECT (DATE_TRUNC('DAYS', CURRENT_DATE)) - (INTERVAL date_interval);
基本上唯一的区别date_interval :: INTERVAL与INTERVAL date_interval
但是当我直接执行类似INTERVAL'2 days'的操作时,它会起作用,但是当我使用变量时,它会失败。
所以我的问题是两个方面
我肯定在转义引号时缺少明显的东西,但是我不确定。任何帮助将不胜感激。
答案 0 :(得分:5)
the documentation清楚地说明了语法
INTERVAL '0 days'
用于常量,也就是说,字符串必须是文字。
它不是'0 days'::interval
之类的类型转换的语法,它允许您更改任意表达式的类型。