Snowflake中多格式日期文本转日期时间格式失败求助
解决Snowflake中多格式日期文本转日期时间的问题
你的LOADDATE字段存在多种日期格式,使用单一格式的TO_TIMESTAMP_NTZ会因格式不匹配报错,可通过以下方法解决:
解决方案:使用TRY_TO_TIMESTAMP_NTZ多格式解析
TRY_TO_TIMESTAMP_NTZ支持传入多个日期格式参数,函数会按顺序尝试解析输入字符串,匹配成功则返回对应的时间戳,所有格式都不匹配时返回NULL(不会抛出错误)。
示例SQL
SELECT LOADDATE, -- 直接返回TIMESTAMP_NTZ类型,Snowflake默认显示为YYYY-MM-DD HH:MI:SS格式 TRY_TO_TIMESTAMP_NTZ(LOADDATE, 'YYYY/MM/DD HH:MI:SS', 'YYYY/MM/DD', 'YYYY-Mon-DD' ) AS FORMATTED_LOADDATE FROM YOUR_TABLE;
如果需要将结果转为字符串格式的YYYY-MM-DD HH:MI:SS,可以嵌套TO_CHAR:
SELECT LOADDATE, TO_CHAR( TRY_TO_TIMESTAMP_NTZ(LOADDATE, 'YYYY/MM/DD HH:MI:SS', 'YYYY/MM/DD', 'YYYY-Mon-DD' ), 'YYYY-MM-DD HH:MI:SS' ) AS FORMATTED_LOADDATE FROM YOUR_TABLE;
格式说明
'YYYY/MM/DD HH:MI:SS':匹配带时分秒的斜杠分隔日期(如2021/07/30 00:00:00)'YYYY/MM/DD':匹配不带时分秒的斜杠分隔日期(如2020/06/26)'YYYY-Mon-DD':匹配月份为英文缩写的日期(如2024-May-23)
为什么原方法报错
TO_TIMESTAMP_NTZ要求输入字符串严格匹配指定格式,当遇到不匹配的日期字符串(如2024-May-23)时会直接抛出解析错误,而TRY_TO_TIMESTAMP_NTZ具备容错性,适合处理多格式混合的字段。
内容的提问来源于stack exchange,提问作者user15488631
相关产品推荐
相关产品推荐

