我在 PostgreSQL 中创建表 employees 有 4 列(employee_id
、first_name
、last_name
和 date_of_birth
,所有NOT NULL
,employee_id
为主键)。
现在,我的表中有 704 条记录,并使用 for 循环添加更多记录。为此,我编写了这段代码:
DO
$do$declare
r text;
BEGIN
FOR i in 705..50000 LOOP
r = i::text||'days';
INSERT INTO employees(employee_id, first_name, last_name, date_of_birth)
VALUES (
i,
'ww'||i::varchar,
'ss'||i::varchar,
'1980-01-01 00:00:00'+interval r
);
END LOOP;
END
$do$;
但它让我在使用 r 时出错。如何修复此代码?
最佳答案
请试试这个
CREATE OR REPLACE FUNCTION sp_test()
RETURNS void AS
$BODY$
declare r text;
begin
for i in 705..750
loop
r := i::text||' days';
insert into employees(employee_id, first_name, last_name, date_of_birth)
values (i,
'ww'||i::varchar,
'ss'||i::varchar,
'1980-01-01 00:00:00'::TIMESTAMP + r::interval);
end loop;
end
$BODY$
LANGUAGE plpgsql;
更多解释:你的代码是i::text || 'days'
将输出 705days
而不是我们想要的 705 days
。还有一个地方是'1980-01-01 00:00:00' + interval r
,我改成'1980-01-01 00:00:00'::TIMESTAMP + r::interval
更清晰。
希望对您有所帮助。
关于PostgreSQL 格式化时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49229974/