插入到postgres时省略了尾随零



在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; 

然后我会正确地获得数据,但它是字符串格式的,如果我改为时间。时间格式,则跳过零部分。

是否有任何方法可以在不跳过零到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函数适当地格式化时间戳。

如果您想避免在查询中使用to_char,请在表上定义一个视图,将时间戳格式化为字符串,并在查询中用到该视图。

无论如何,不要将时间戳作为字符串存储在表中。您将丢失有效性检查和日期运算,并浪费存储空间。

最新更新