在postgres中使用带有时间戳的条件语句时出错

时间:2016-07-27 10:25:55

标签: sql postgresql

我正在执行以下操作:

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...  
                                              ^  

我做错了什么?

2 个答案:

答案 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

的列名