Snowflake中如何将varchar类型数据转换为有效的timestamp时间值
错误原因
你当前使用的时间格式模板'YYYYMMDD HH24:MI:SS.FF'包含空格、冒号、英文点等分隔符,但待解析的字符串'20211101132344205550'是纯数字拼接的无分隔符格式,二者结构不匹配,因此解析失败。
你之前用同类方法可以正常运行,大概率是之前staging层的timestamp字段值是带对应分隔符的格式,本次数据源格式发生了变化。
解决方案
推荐使用匹配纯数字格式的模板直接解析,写法更简洁:
- 你的待解析字符串结构为「8位日期+6位时分秒+6位微秒」,直接使用对应格式模板即可,无需额外截断字符串:
TO_TIMESTAMP(timestamp, 'YYYYMMDDHH24MISSFF6')
如果要兼容可能存在的更长小数秒的场景,也可以调整FF后的数字,比如FF9匹配9位纳秒:
TO_TIMESTAMP(timestamp, 'YYYYMMDDHH24MISSFF9')
如果确实需要沿用原有带分隔符的格式模板,可以先给纯数字字符串插入对应分隔符再解析(写法相对繁琐,不推荐):
TO_TIMESTAMP( CONCAT( LEFT(timestamp,8), ' ', SUBSTR(timestamp,9,2), ':', SUBSTR(timestamp,11,2), ':', SUBSTR(timestamp,13,2), '.', SUBSTR(timestamp,15) ), 'YYYYMMDD HH24:MI:SS.FF' )
内容的提问来源于stack exchange,提问作者Shagg
相关产品推荐
相关产品推荐

