【问题标题】:Snowflake - Multiple date formats雪花 - 多种日期格式
【发布时间】:2022-01-31 12:31:04
【问题描述】:

我有一个雪花表列,它有多种日期格式(带有 AM、PM 和仅日期的时间戳)存储为 varchar。

请告诉我如何使用 snowsql case 语句或任何其他方法将它们转换为 timestamp_tz 格式。

例如列中可用的不同格式及其预期转换如下

  1. ('9/03/2020 12:00:00 AM' ,'mm/dd/yyyy hh12:mi:ss am') 应转换为 2020-03-09 12:00:00

  2. ('9/03/2020 05:00:00 PM' ,'mm/dd/yyyy hh12:mi:ss pm') 应转换为 2020-03-09 17:00:00

  3. 13/09/2021 应转换为 2021-09-13 00:00:00

谢谢

【问题讨论】:

    标签: date snowflake-cloud-data-platform


    【解决方案1】:

    如果您有级联格式选项,请使用 TRY_TO_TIMESTAMP 或 TRY_TO_TIMESTAMP_NTZ 以便失败导致 NULL,然后将它们与 COALESCE 链接在一起

    SELECT
        column1,
        TRY_TO_TIMESTAMP(column1, 'mm/dd/yyyy hh12:mi:ss am') as format1,
        TRY_TO_TIMESTAMP(column1, 'mm/dd/yyyy hh12:mi:ss pm') as format2,
        TRY_TO_TIMESTAMP(column1, 'dd/mm/yyyy') as format3, 
        COALESCE(format1, format2, format3) as date_a,
        COALESCE(TRY_TO_TIMESTAMP(column1, 'mm/dd/yyyy hh12:mi:ss am'),
                 TRY_TO_TIMESTAMP(column1, 'mm/dd/yyyy hh12:mi:ss pm'),
                 TRY_TO_TIMESTAMP(column1, 'dd/mm/yyyy')
            ) as date_b    
    FROM VALUES
        ('9/03/2020 12:00:00 AM'),
        ('9/03/2020 05:00:00 PM'), 
        ('13/09/2021');
    

    给予:

    COLUMN1 FORMAT1 FORMAT2 FORMAT3 DATE_A DATE_B
    9/03/2020 12:00:00 AM 2020-09-03 00:00:00.000 2020-09-03 00:00:00.000 2020-09-03 00:00:00.000 2020-09-03 00:00:00.000
    9/03/2020 05:00:00 PM 2020-09-03 17:00:00.000 2020-09-03 17:00:00.000 2020-09-03 17:00:00.000 2020-09-03 17:00:00.000
    13/09/2021 2021-09-13 00:00:00.000 2021-09-13 00:00:00.000 2021-09-13 00:00:00.000

    这表明不需要 format2,因此可以学习并节省计算!

    【讨论】:

      【解决方案2】:

      您只需要使用 TRY_TO_TIMESTAMP 函数

      【讨论】:

        猜你喜欢
        • 2016-10-14
        • 1970-01-01
        • 2020-12-27
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        相关资源
        最近更新 更多