PostgreSQL中time类型为何不显示毫秒?precision参数解析
PostgreSQL time类型显示与精度问题解析
为什么默认不显示毫秒/微秒?
PostgreSQL客户端默认输出格式会自动省略time类型值尾部的零值小数部分——不是没存储,只是没显示。比如实际值是10:23:00.123456时,客户端会完整显示;如果小数部分全为0,就会简化成10:23:00。
time(n)精度参数的作用
time(n)里的n是用来指定秒的小数部分存储精度,范围0到6:
- n=0:仅存储时、分、秒,无小数部分
- n=3:存储到毫秒(千分之一秒)
- n=6:存储到微秒(百万分之一秒)
这个参数是限制存储的精度,而非控制显示。比如定义字段为time(3)时,插入的微秒值会被截断到毫秒位,确保存储精度符合设定要求。
如何强制显示毫秒/微秒?
如果需要强制显示小数部分(包括尾部的零),可以用to_char()函数格式化输出:
select to_char(now()::time(6), 'HH24:MI:SS.US');
这样即使小数部分全是0,也会显示为10:23:00.000000。
你执行select now()::time(6)返回10:23:00,大概率是因为执行语句时now()的秒小数部分刚好为0,或是客户端默认格式隐藏了零值小数。换个时间点测试,或是用上面的格式化语句就能验证实际存储的精度。
内容的提问来源于stack exchange,提问作者e1s
相关产品推荐
相关产品推荐

