You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Trino SQL为何截断纳秒仅留毫秒?如何保留时间戳精度?

Trino纳秒精度丢失问题:原因与解决方法

为什么会出现精度丢失?

  • 客户端显示限制:多数Trino客户端(默认CLI、部分BI工具、JDBC驱动)默认仅展示毫秒级(3位小数)精度,但Trino服务器内部实际保留了完整的纳秒精度。
  • 驱动/连接参数配置:旧版JDBC驱动的时间处理逻辑可能自动截断精度;部分客户端工具在格式化输出时默认省略毫秒后的位数。
  • 版本兼容性:早期Trino版本对纳秒精度的支持不完善,若使用的版本过旧,可能存在精度丢失问题(主流版本350+已修复该问题)。

如何保留纳秒精度?

调整客户端显示设置

  • Trino CLI:使用--output-format=json输出,JSON格式会保留完整纳秒精度;部分版本支持--show-nanoseconds参数强制展示全精度。
  • JDBC驱动:在JDBC URL中添加&useLegacyDatetimeCode=false参数,禁用旧版时间处理逻辑;通过ResultSet.getTimestamp(int, Calendar)方法获取完整精度的时间戳,避免自动截断。

强制格式化输出为字符串

使用to_char函数指定全精度格式,确保输出保留9位纳秒:

SELECT to_char(
  from_iso8601_timestamp_nanos('2020-05-11T11:15:05.123456789+01:00'),
  'yyyy-MM-dd HH:mm:ss.SSSSSSSSS z'
);

验证内部精度

通过计算时间差验证Trino内部是否保留纳秒精度:

SELECT date_diff('nanosecond', 
  from_iso8601_timestamp_nanos('2020-05-11T11:15:05.123000000+01:00'),
  from_iso8601_timestamp_nanos('2020-05-11T11:15:05.123456789+01:00')
);
-- 返回结果456789,说明内部完整保留了纳秒精度

内容的提问来源于stack exchange,提问作者Misha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:57:36