Snowflake解析带德语月份名时间戳的格式转换报错问题
解决方案
改会话时区没用,时区参数只控制时间偏移计算,和月份、星期名称的解析语言无关。Snowflake的MON、MONTH格式符对非数字月份名的匹配,完全依赖会话级LANGUAGE参数,默认值是en(英语),所以识别不了德语的mai这类月份名。
直接把当前会话的语言设为德语,就能直接解析你要的格式,不需要手动写替换逻辑适配不同月份:
-- 设置当前会话语言为德语 ALTER SESSION SET LANGUAGE = 'de'; -- 原解析语句可直接运行成功 SELECT to_timestamp('31 mai 2022 23:22:01 UTC', 'DD MON YYYY HH24:MI:SS UTC');
补充说明
- 该设置会自动适配所有德语月份的缩写和全称,包括和英语拼写有差异的三月(Mär/März)、十月(Okt/Oktober)、十二月(Dez/Dezember),不需要额外写
REPLACE函数逐个映射。 - 如果你处理的是多语言混合的数据源,可以在处理德语来源数据的逻辑前单独设置该参数,处理完成后切回
LANGUAGE = 'en'即可;也可以给对应处理任务绑定独立的用户、仓库级参数配置,避免影响其他SQL逻辑。 - 语句里的UTC后缀会被正常识别为UTC时区,如果你需要转换为其他时区输出,后续搭配
CONVERT_TIMEZONE函数处理即可。
内容的提问来源于stack exchange,提问作者Nico Shabadoo
相关产品推荐
相关产品推荐

