Snowflake使用正则表达式处理列数据 统一多格式日期为yyyy-MM-dd
Snowflake多格式日期统一转换方案
首先纠正一个常见误解:REGEXP_REPLACE 完全支持直接作用于表的整列数据,只是处理多格式混杂的日期场景,不需要编写复杂正则表达式,用Snowflake原生的日期解析函数实现起来更简洁、容错性更高。
实现逻辑
核心思路是用TRY_TO_DATE函数匹配多种常见日期格式,解析为标准DATE类型后再统一格式化为yyyy-MM-dd字符串,异常格式无法解析的记录会返回NULL,可根据业务需求过滤或标记。
示例代码
SELECT Col_A AS 原始日期值, TO_CHAR( COALESCE( -- 按你业务中日期格式的出现频率调整匹配优先级 TRY_TO_DATE(Col_A, 'YY-MON-DD'), TRY_TO_DATE(Col_A, 'YYYY-MM-DD'), TRY_TO_DATE(Col_A, 'YYYY-MM-DD HH24:MI:SS'), TRY_TO_DATE(Col_A, 'YYYYMMDD') ), 'YYYY-MM-DD' ) AS 标准化后日期 FROM 你的表名;
样例转换效果
| 原始日期值 | 标准化后日期 |
|---|---|
| 20-APR-30 | 2030-04-20 |
| 20-FEB-25 | 2025-02-20 |
| 2021-12-01 | 2021-12-01 |
| 2021-12-10 00:00:00 | 2021-12-10 |
| 20211210 | 2021-12-10 |
注意事项
如果两位数年份的日期存在上世纪的记录,可以通过调整会话参数TWO_DIGIT_CENTURY_START修改世纪判断规则,避免解析出不符合预期的年份。
内容的提问来源于stack exchange,提问作者Chicken Sandwich No Pickles
相关产品推荐
相关产品推荐

