【问题标题】:Converting a four digit month year string to date in Snowflake在雪花中将四位数的月份年份字符串转换为日期
【发布时间】:2022-01-26 03:55:19
【问题描述】:

所以我有一些数据如下:

data
1203
0323
0101
1005
1130
0226

所以在每种情况下,前两位数字是月份,后两位数字是年份。无论如何,是否可以轻松地将这些映射到日期而不使其成为一个直接的查找表?

这就是我想要的

data date
1203 12/01/2003
0323 03/01/2023
0101 01/01/2001
1005 10/01/2005
1130 11/01/2030
0226 02/01/2026

在任何情况下,我都希望当天是该月的第一天。

【问题讨论】:

    标签: sql date snowflake-cloud-data-platform


    【解决方案1】:

    我们可以尝试构建一个包含年、月、日组件的有效日期字符串,然后使用TO_DATE 函数转换为真实日期:

    WITH cte AS (
        SELECT '1203' AS dt
    )
    
    SELECT dt, TO_DATE(CONCAT('01', dt), 'DDMMYY') AS dt_out
    FROM cte;
    

    【讨论】:

      【解决方案2】:

      和蒂姆的回答差不多:

      您想从数字转换为文本(如果您的数据是文本跳过,但如果它是变体(来自 JSON 或 XML),您仍然需要转换为 TEXT),然后将 TO_DATE 解析为 MM 月, YY 年在 2 列 (format tokens)。你会得到每个月的第一天

      SELECT 
          column1, 
          to_date(column1::text, 'MMYY')
      FROM VALUES
          (1203),
          (0323),
          (0101),
          (1005),
          (1130),
          (0226);
      

      给予:

      COLUMN1 TO_DATE(COLUMN1::TEXT, 'MMYY')
      1203 2003-12-01
      323 2023-03-01
      101 2001-10-01
      1005 2005-10-01
      1130 2030-11-01
      226 2026-02-01

      【讨论】:

        猜你喜欢
        • 2022-08-09
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        相关资源
        最近更新 更多