【问题标题】: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 |