Snowflake - 多种日期格式

Snowflake - Multiple date formats

我有一个雪花 table 列,它有多种日期格式(带有 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

谢谢

你只需要使用TRY_TO_TIMESTAMP功能

如果您有一系列格式设置选项,请使用 TRY_TO_TIMESTAMP or TRY_TO_TIMESTAMP_NTZ so that failure results in NULL, and then chain them together with 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,因此可以学习并节省计算成本!