在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
,请在表上定义一个视图,将时间戳格式化为字符串,并在查询中用到该视图。
无论如何,不要将时间戳作为字符串存储在表中。您将丢失有效性检查和日期运算,并浪费存储空间。