我正在执行以下操作:
create table test(id int not null, time timestamp with time zone);
insert into test (id,time) values (1, case when 0=1 then '2016-07-27 11:53:16.908000 +03:00:00' end);
我从postgres收到以下错误:
ERROR: column "time" is of type timestamp with time zone but expression is of type text
LINE 1: insert into test (id,time) values (1, case when 0=1 then '20...
^
我做错了什么?
答案 0 :(得分:2)
仔细阅读错误消息,它会告诉您问题所在:“但表达式的类型为文字 ”
您需要使用正确的时间戳文字。
'2016-07-27 11:53:16.908000 +03:00:00'
是varchar(文本)常量,而不是时间戳值。要指定时间戳值,请使用:
timestamp '2016-07-27 11:53:16.908000 +03:00:00'
所以你的插页应该是这样的:
insert into test
(id,time)
values
(1, case when 0=1 then timestamp '2016-07-27 11:53:16.908000 +03:00:00' end);
答案 1 :(得分:1)
试试这个:
insert into test (id,time)
select 1, case when 0=1 then '2016-07-27 11:53:16.908000 +03:00:00' ::timestamp end
但是,在您的情况下,条件总是假的,即0<> 1因此您可以将默认值或NULL值放入时间列。
如果需要,可以在创建表格时设置默认值,如
create table test(id int not null,
times timestamp with time zone default now());
旁注:
尽量避免命名keywords
的列名