Snowflake含特殊字符数据插入及小时值提取报错求助
Snowflake提取文件名中小时值的错误解决方法
错误原因
你编写插入脚本时的SQL语句存在参数错误:cast(replace(substr(METADATA$FILENAME,28,2),'/,'') as number)里,replace函数的第二个参数写成了'/,',这导致无法正确替换掉文件名中的斜杠,最终出现'5/'这类带非数字字符的字符串,转换数字时触发22018错误。
修复后的基础写法
直接使用你之前测试成功的正确语句即可:
cast(replace(substr(METADATA$FILENAME,28,2),'/','') as number)
这里replace的第二个参数是'/',第三个参数是空字符串,能正确移除截取部分中的斜杠,确保转换为数字时无异常。
更稳健的优化写法
依赖固定位置28截取的写法,一旦文件路径结构变化就会失效,推荐用SPLIT_PART函数按路径规则提取,适配不同长度的前置路径:
cast(split_part(split_part(METADATA$FILENAME, 'hour=', 2), '/', 1) as number)
- 第一步
split_part(METADATA$FILENAME, 'hour=', 2):按hour=分割字符串,取第二部分得到12/85b3e2d8-0195-4238-b246-7ed6564ac464.json - 第二步
split_part(..., '/', 1):再按/分割,取第一部分得到12 - 最后转换为数字,无需依赖固定字符位置,兼容性更强。
内容的提问来源于stack exchange,提问作者user13975334
相关产品推荐
相关产品推荐

