Snowflake TIMESTAMP - 将毫秒值保留为 .000000,存储在表中

Posted

技术标签:

【中文标题】Snowflake TIMESTAMP - 将毫秒值保留为 .000000,存储在表中【英文标题】:Snowflake TIMESTAMP - Preserve Millisecond Values to .000000, store in table 【发布时间】:2019-11-21 02:53:07 【问题描述】:

我的json值为2045-06-02T09:23:41.8666668

我想通过 TIMESTAMP 转换为雪花中的 DATE 数据类型并保持准确的值,但我有三个问题:

1) TIMESTAMP 数据类型从不存储在表中。 (每https://docs.snowflake.net/manuals/sql-reference/data-types-datetime.html

2) 当我使用 ::TIMESTAMP 时,它会在 2045-06-02 09:23:41.866 处中断

3)去掉表示时间的“T”

谁能指点我处理这个问题的文档?

【问题讨论】:

【参考方案1】:

1) & 2) 文档(您链接到)说 TIMESTAMP 默认使用 9dp,当您选择时看到的是演示文稿格式问题,而不是存储问题。

select '2045-06-02 09:23:41.8666668'::text as ta
    ,'2045-06-02 09:23:41.9777779'::text as tb
    ,ta::timestamp ta_d, ta::timestamp(0) ta_0
    ,ta::timestamp(3) ta_3
    ,ta::timestamp(6) ta_6
    ,tb::timestamp tb_d, tb::timestamp(0) tb_0
    ,tb::timestamp(3) tb_3, tb::timestamp(6) tb_6)
    ,datediff('millisecond', ta_d, tb_d )
    ,datediff('millisecond', ta_0, tb_0 )
    ,datediff('millisecond', ta_3, tb_3 )
    ,datediff('millisecond', ta_6, tb_6 ),
    datediff('microsecond', ta_d, tb_d )
    ,datediff('microsecond', ta_0, tb_0 )
    ,datediff('microsecond', ta_3, tb_3 )
    ,datediff('microsecond', ta_6, tb_6 )
    ,datediff('nanosecond', ta_d, tb_d )
    ,datediff('nanosecond', ta_0, tb_0 )
    ,datediff('nanosecond', ta_3, tb_3 )
    ,datediff('nanosecond', ta_6, tb_6 )
    ;

默认显示小数点后 9 位。

3) 那是一个formatting thing..

【讨论】:

以上是关于Snowflake TIMESTAMP - 将毫秒值保留为 .000000,存储在表中的主要内容,如果未能解决你的问题,请参考以下文章

雪花算法(SnowFlake)

Snowflake SQL 错误 - 函数“-”的参数类型无效:(TIMESTAMP_NTZ(9), TIMESTAMP_NTZ(9))

java中如何将Timestamp转换为毫秒数

将含有timestamp的json对象的毫秒数转成日期格式 ssh+jqery+json中timestamp数据问题

使用“?::TIMESTAMP_NTZ”在查询中指定类型时,Snowflake JDBC 批量插入失败并显示“绑定变量?未设置”

将 Varchar 转换为 Snowflake 中的时间戳