【发布时间】:2020-06-18 20:15:20
【问题描述】:
虽然在 PostgreSQL 中插入包含零的毫秒部分的日期是跳过。如果日期中有非零部分,它将正确插入到数据库中。
例如:2019-06-01 11:59:59:371Z 这将正确插入到数据库中,但是当我插入'2010-06-21 11:59:59:010Z' 时将变为'2010-06-21 11:59:59:01Z' 最后一个零部分被跳过。
我用了一个查询
SELECT to_char(date, 'YYYY-MM-DD HH:MI:SS:MSZ')
FROM table_name;
然后我将正确获取数据,但它是字符串格式,如果我更改为 time.Time 格式,则会跳过零部分。
是否有任何方法可以强制存储毫秒而不会将零跳过到 postgres 或任何解决此问题的方法
2099-06-21T23:59:59.371Z -> 2099-06-21T23:59:59.371Z
2099-06-21T23:59:59.000Z -> 2099-06-21T23:59:59Z
2099-06-21T23:59:59.010Z -> 2099-06-21T23:59:59.01Z
2010-06-21T23:59:59.001Z -> 2010-06-21T23:59:59.001Z
2010-06-21T23:59:59.100Z -> 2010-06-21T23:59:59.1Z
【问题讨论】:
-
如果
to_char()显示正确,则值存储正确。所以它一定是你在程序中检索值的方式切断了毫秒 -
是的,我正在使用 golang 所以将此字符串转换为 time.Time 然后它将再次从结果中跳过零。我想要这个时间数据。时间数据类型。我使用日期:=“2018-10-24T18:50:23.010Z”parse_time,_:=时间.解析(时间.RFC3339,日期)
-
这是表示层问题,不是数据库问题。数据库将其存储为数字,最后的零无关紧要。为什么你需要它有零?
-
另一端期望“2018-10-24T18:50:23.010Z”格式的数据。是解决此问题的任何其他方法。
-
@aswathy 扫描到
time.Time时出现什么错误?您尝试扫描的 db 值的类型是什么?您使用的是什么数据库驱动程序?例如,如果您从 postgres db 中选择timestamp或timestamptz值,并使用github.com/lib/pq驱动程序,然后将该值直接扫描到*time.Time,那么一切都应该自动运行,应该没有错误,至少我知道我从来没有遇到过。
标签: postgresql date go