我想将格式(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)