当值全为零时,Postgres 时间戳字段不显示微秒分量
Postgres timestamp field not showing microseconds component when value is all zeros
上下文:我正在使用 Postgres 9.3 和 psql (PostgreSQL) 11.1。
鉴于以下 table:
create table ts_test(ts timestamp);
以下插入命令以微秒粒度显示时间:
INSERT INTO ts_test
VALUES
(now()),
(TIMESTAMP '2019-03-06 20:18:41.000001');
select * from ts_test;
ts
----------------------------
2019-03-06 20:40:35.062547
2019-03-06 20:18:41.000001
但是,当插入一个全为零的时间戳作为微秒分量时,我观察到以下行为:
INSERT INTO ts_test VALUES (TIMESTAMP '2019-03-06 20:18:41.000000');
select * from ts_test;
ts
----------------------------
2019-03-06 20:40:35.062547
2019-03-06 20:18:41.000001
2019-03-06 20:18:41
我仔细阅读了文档,但对于为什么第三个条目中省略了微秒,我一头雾水。
TIMESTAMP '2019-03-06 20:18:41.000000'
和 TIMESTAMP '2019-03-06 20:18:41'
是相同的值。全零小数位,这只是微不足道的噪音,没有存储在数据类型 timestamp
(内部是一个 8 字节整数)。
如果你想保留原始文字,包括所有噪音、无关紧要的零和白色 space,你必须将它存储在像 text
.
这样的字符串类型中
如果你想显示微秒时间戳,你可以使用to_char()
with the template pattern US
:
select to_char(ts, 'YYYY-MM-DD HH24:MI:SS:US') AS ts1 from ts_test;
ts1
----------------------------
2019-03-06 20:40:35.062547
2019-03-06 20:18:41.000001
2019-03-06 20:18:41.000000 -- !
这个结果当然是text
。 (使用模式 MS
表示毫秒。)
上下文:我正在使用 Postgres 9.3 和 psql (PostgreSQL) 11.1。
鉴于以下 table:
create table ts_test(ts timestamp);
以下插入命令以微秒粒度显示时间:
INSERT INTO ts_test
VALUES
(now()),
(TIMESTAMP '2019-03-06 20:18:41.000001');
select * from ts_test;
ts
----------------------------
2019-03-06 20:40:35.062547
2019-03-06 20:18:41.000001
但是,当插入一个全为零的时间戳作为微秒分量时,我观察到以下行为:
INSERT INTO ts_test VALUES (TIMESTAMP '2019-03-06 20:18:41.000000');
select * from ts_test;
ts
----------------------------
2019-03-06 20:40:35.062547
2019-03-06 20:18:41.000001
2019-03-06 20:18:41
我仔细阅读了文档,但对于为什么第三个条目中省略了微秒,我一头雾水。
TIMESTAMP '2019-03-06 20:18:41.000000'
和 TIMESTAMP '2019-03-06 20:18:41'
是相同的值。全零小数位,这只是微不足道的噪音,没有存储在数据类型 timestamp
(内部是一个 8 字节整数)。
如果你想保留原始文字,包括所有噪音、无关紧要的零和白色 space,你必须将它存储在像 text
.
如果你想显示微秒时间戳,你可以使用to_char()
with the template pattern US
:
select to_char(ts, 'YYYY-MM-DD HH24:MI:SS:US') AS ts1 from ts_test;
ts1
----------------------------
2019-03-06 20:40:35.062547
2019-03-06 20:18:41.000001
2019-03-06 20:18:41.000000 -- !
这个结果当然是text
。 (使用模式 MS
表示毫秒。)