Snowflake中DD-MM-YYYY格式日期转YYYY-MM-DD方案咨询
Snowflake跨表日期关联转换方案
错误根因
Tab1的Col1实际存储格式为DD-MM-YYYY,你之前的写法要么输入格式参数与实际不匹配,要么存在语法错误,导致Snowflake无法识别输入的日期值。
可行转换方案
方案1:标准日期类型关联(推荐,性能最优)
直接将Tab1的Col1转换为Snowflake标准日期类型,和Tab2的日期类型Col2直接关联即可,无需额外转字符串:
SELECT * FROM Tab1 INNER JOIN Tab2 ON TO_DATE(Tab1.Col1, 'DD-MM-YYYY') = Tab2.Col2;
方案2:兼容脏数据的关联方式
如果Tab1的Col1存在不符合格式的脏数据,可以用TRY_TO_DATE避免查询中断,转换失败的行返回null不会关联上:
SELECT * FROM Tab1 INNER JOIN Tab2 ON TRY_TO_DATE(Tab1.Col1, 'DD-MM-YYYY') = Tab2.Col2;
方案3:字符串格式匹配关联
如果Tab2的Col2是YYYY-MM-DD格式的字符串类型,可以将Tab1的Col1转成对应格式的字符串再关联:
SELECT * FROM Tab1 INNER JOIN Tab2 ON TO_CHAR(TO_DATE(Tab1.Col1, 'DD-MM-YYYY'), 'YYYY-MM-DD') = Tab2.Col2;
原有写法报错原因
TO_TIMESTAMP_NTZ(Date(DOS, 'YYYY-MM-DD')):DATE函数指定的输入格式为YYYY-MM-DD,和Col1实际的DD-MM-YYYY格式不匹配,导致日期识别失败Date((DOS, 'YYYY-MM-DD'):存在语法错误,多了一层左括号,同时输入格式参数错误TO_Varchar(Date(DOS, 'DD-MM-YYYY'),'YYYY-MM-DD'):语法逻辑接近正确,大概率是执行时存在拼写错误或者字段引用错误,该写法可以正常运行,但直接用日期类型关联性能更优
内容的提问来源于stack exchange,提问作者Rohit Kulkarni
相关产品推荐
相关产品推荐

