将时间戳转换为文本时获得不同的结果

时间:2016-04-18 21:14:16

标签: postgresql amazon-web-services amazon-redshift psql

我想将格式(YYYY-MM-DD HH:MI:SS.MS)的时间戳字段转换为它的文本表示。但由于某些原因得到不同的结果:

如果我试图从表中转换时间戳:

create table test_dt (dt timestamp);
insert into test_dt values ('2016-04-14 17:10:33.007');
insert into test_dt values ('2016-04-14 17:10:33');

时间戳被截断到秒:

select dt::text from test_dt;
         dt          
---------------------
 2016-04-14 17:10:33
 2016-04-14 17:10:33
(2 rows)

但如果我使用直接选择语句,一切正常:

select '2016-04-14 17:10:33.007'::timestamp::text;
         varchar         
-------------------------
 2016-04-14 17:10:33.007
(1 row)

问题不在于如何将其转换为表格中的文本并包含精度,而是:

  • 我做错了什么?
  • 为什么这两种方法会返回不同的结果?
  • 这种行为背后的理性是什么?

更新

as @muistooshort建议以下命令给出正确的结果:

select c::text from (select '2016-04-14 17:10:33.007'::timestamp union select '2016-04-14 17:10:33'::timestamp ) as t(c);
            c            
-------------------------
 2016-04-14 17:10:33
 2016-04-14 17:10:33.007
(2 rows)

和是test_dt确实有.007

select * from test_dt;
           dt            
-------------------------
 2016-04-14 17:10:33
 2016-04-14 17:10:33.007
(2 rows)

同样to_char给出了表中的毫秒数:

select to_char(dt, 'YYYY-MM-DD HH:MI:SS.MS') from test_dt;
         to_char         
-------------------------
 2016-04-14 05:10:33.000
 2016-04-14 05:10:33.007
(2 rows)

0 个答案:

没有答案