Snowflake从CSV读取时TO_TIMESTAMP函数解析失败问题排查
问题原因及解决方法
问题根源
你的CSV数据里的时间戳字段被双引号包裹了(报错信息里的"8/6/2025 3:27:55 PM"是HTML转义后的双引号,实际就是"8/6/2025 3:27:55 PM")。而你用的TO_TIMESTAMP格式串'MM/DD/YYYY HH12:MI:SS AM'只匹配不带引号的时间字符串,所以解析失败——直接传不带引号的字符串能成功,也验证了这一点。
之前尝试的$1::string没用,是因为只是做了类型转换,字段里的双引号依然存在,字符串还是带引号的状态,格式串依然不匹配。
解决方法
有两种可行的处理方式:
先去除双引号再解析
使用TRIM函数去掉字段两端的双引号,再传给TO_TIMESTAMP:SELECT TO_TIMESTAMP(TRIM($1, '"'), 'MM/DD/YYYY HH12:MI:SS AM') FROM @CODE_TWO_STAGE;在COPY/Snowpipe配置中自动处理引号
如果是用Snowpipe加载数据,直接在COPY INTO语句的文件格式参数里指定FIELD_OPTIONALLY_ENCLOSED_BY = '"',Snowflake会自动识别并去除字段的双引号包裹:COPY INTO your_target_table FROM @CODE_TWO_STAGE FILE_FORMAT = (TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY = '"' SKIP_HEADER = 1);配置后,$1会直接返回不带引号的时间字符串,无需额外处理即可正常解析。
内容的提问来源于stack exchange,提问作者rockusbacchus
相关产品推荐
相关产品推荐

