ClickHouse中自动计算两个DateTime64(9)纳秒时间差的更优方法咨询
优化ClickHouse纳秒级时间差计算方案
你可以使用ClickHouse内置的toUnixTimestamp64Nano()函数直接获取DateTime64(9)的纳秒级时间戳,相减后转换为Int64即可,写法更简洁直观:
`Start` DateTime64(9), `End` DateTime64(9), `Duration` Int64 DEFAULT toInt64(toUnixTimestamp64Nano(End) - toUnixTimestamp64Nano(Start)),
说明:
toUnixTimestamp64Nano()专门针对纳秒精度的DateTime64类型,返回从1970-01-01 00:00:00 UTC开始的纳秒数(UInt64类型)。- 两个时间戳相减后得到的差值就是纳秒级时间差,转换为Int64是安全的:DateTime64(9)的时间范围对应的纳秒数差值最大值约为9.2e18,未超过Int64的上限(9223372036854775807),不会出现溢出问题。
- 相比手动转Decimal64再乘系数的写法,内置函数更符合语义,也避免了手动计算系数可能出现的错误。
注意:该函数从ClickHouse 20.12版本开始支持,若使用旧版本需先升级。
内容的提问来源于stack exchange,提问作者Chris White
相关产品推荐
相关产品推荐

