INTERVAL添加我一天在PostgreSQL中不起作用

时间:2019-12-18 02:35:50

标签: postgresql

我有一张这样的桌子:

CREATE TABLE DateInsert(
    DateInsert timestamp without time zone,
    DateInt integer NOT NULL
);

我想插入清单日期为2018年1月1日至2045-05-18,但这给了我错误的答案

“类型间隔的无效输入语法:”

CREATE OR REPLACE FUNCTION insertdate() RETURNS integer AS $$
DECLARE i integer := 0;
    d timestamp without time zone := '2018-01-01';
    di integer := 0;
BEGIN
    while i <10000
    LOOP
        d := d + INTERVAL ''+ i::character varying + ' day';
        di := to_char(d , 'yyyymmdd')::int;
        insert into DateInsert(DateInsert,DateInt) values(d, di); 
        i := i+1;
    END LOOP ;
    return i;
END;
$$ LANGUAGE plpgsql;

如何在n天循环中将时间戳加1的db插入数据库?

在sql server中的代码一直在工作。

declare @i int=0
declare @d datetime
declare @di int = 0
while @i <10000
    begin
    set @d = DATEADD(DAY, @i, '2018-01-01')
    set @di = cast(CONVERT(VARCHAR(10), @d, 112) as int)
    insert into DateInsert(DateInsert,DateInt) values(@d, @di)
    set @i = @i+1 
end

1 个答案:

答案 0 :(得分:3)

串联运算符是||而不是+。而且前缀形式似乎不喜欢文字。但是您可以强制转换连接表达式。

如此改变

...
d := d + INTERVAL ''+ i::character varying + ' day';
...

...
d := d + (i || ' day')::interval;
...

应该为您工作。