snowflake-cloud-data-platform - CURRENT_TIMESTAMP() 精度?
问题描述
文档说我们可以指定从 0(秒)到 9(纳秒)的精度
但是,无论我做什么,它似乎都默认为毫秒...
SELECT
CURRENT_TIMESTAMP() AS CT0a
,to_varchar(CT0a, 'yyyy-mm-dd hh24:mi:ss.FF9') AS CT0b
,CURRENT_TIMESTAMP(1) AS CT1a
,to_varchar(CT1a, 'yyyy-mm-dd hh24:mi:ss.FF9') AS CT1b
,CURRENT_TIMESTAMP(9) AS CT9a
,to_varchar(CT9a, 'yyyy-mm-dd hh24:mi:ss.FF9') AS CT9b
;
如果我用足够的小数显示它,似乎会返回相同的东西,这总是毫秒......
CT0A 2020-04-08 23:37:56.667 +0000
CT0B 2020-04-08 23:37:56.667000000
CT1A 2020-04-08 23:37:56.600 +0000
CT1B 2020-04-08 23:37:56.667000000
CT9A 2020-04-08 23:37:56.667 +0000
CT9B 2020-04-08 23:37:56.667000000
CT0a、CT1a 和 CT2a 以适当的小数位数显示,但 CT0b、CT1b 和 CT9b 都显示完全相同的时间,最多 3 位小数...
我错过了一些明显的东西吗?
解决方案
虽然 Snowflake 时间戳数据类型支持高达 9 位的精度,但 current_timestamp 函数不支持。任何超过毫秒的时间都将是时钟的错误精度,因此没有报告。
https://docs.snowflake.com/en/sql-reference/functions/current_timestamp.html
有效值范围为 0 - 9。但是,大多数平台不支持真正的纳秒精度;您获得的精度可能低于您指定的精度。在实践中,精度通常最多约为毫秒(3 位)。
如果不指定输出格式,即使内部精度更高,Snowflake 也会以小数点后三位显示秒:
select to_timestamp(15863566077839811234, 9); -- Seconds has 9 digit precision, but displays 3
select to_varchar(to_timestamp(15863566077839811234, 9), 'yyyy-mm-dd hh24:mi:ss.FF9'); -- Displays all 9 digit precision
推荐阅读
- azure - ADF 的 Azure Function 组件不适用于自托管集成运行时
- android - 未能解决:Lbutterknife/ButterKnife$Action;安卓X?
- c - 使用 __SYSCALL_DEFINEx 的单个宏定义中的多个值
- javascript - 如何避免一个数组(ClickeditemType)中的元素在javascript中被推送到另一个数组(selectedclassnamesFirstLevel)
- r - R中唯一子列的记录数
- http - 如何将 Ruby on Rails 网站从 http 1 更新为 http 2
- python - 为什么当线程数比硬件可能的线程数增加时性能会提高?
- istio - 将混合器策略应用于特定服务
- vue.js - 有没有办法在 vue.js 中使用一个组件页面同时限制其他组件?
- .net - 我可以将 LUIS Bot 用于 Intranet Web 应用程序来创建数据吗