我有一个 ClickHouse 表,其中包含以下架构:
`Start` DateTime64(9),
`End` DateTime64(9),
`Duration` Int64 DEFAULT toInt64((toDecimal64(End, 9) - toDecimal64(Start, 9)) * 1000000000),
Start
和End
是DateTime64(9)
具有纳秒精度的字段,我还需要将它们的差异存储在Duration
我希望 ClickHouse 自动生成的字段中。我很难找到将DateTime64(9)
字段转换为纳秒纪元时间戳的最佳方法,最终拼凑出一个解决方案,将它们转换为小数并乘以一个常数,以整数形式给出纳秒的差值。
这有效,我似乎得到了正确的Duration
值,但该* 1000000000
部分对我来说似乎有一种气味。有没有更好的方法来做到这一点,我不知道?我查看了 ClickHouse 的日期函数,没有找到处理纳秒精度的函数,只有toUnixTimestamp()
秒精度。
有一些nano特定的函数(在文档中无法引用),让我们在ClickHouse 版本 22.8.15.23中观察它们:
这个应该适合你: