Snowflake中如何将varchar类型时间字符串转换为timestamp?
解决varchar转timestamp的问题
你的数据格式是标准的ISO 8601 UTC时间串(带毫秒和Z标识),之前的转换失败主要是函数选择错误或格式串不对,以下是正确的解决方法:
错误原因分析
to_date是仅用于转换日期的函数,只能提取日期部分,完全不适合处理带时间的字符串,直接排除这种用法。- 你用的
TRY_TO_TIMESTAMP格式串有两个问题:年份占位符少了一个Y(应该是YYYY而非YYY),且没有匹配字符串里的毫秒部分(.00),导致解析失败。
正确转换方法
方法1:使用匹配完整格式的格式串
针对你的时间格式2021-10-28T20:40:56.00Z,用对应的格式串调用TRY_TO_TIMESTAMP:
SELECT COALESCE(TRY_TO_TIMESTAMP(last_check, 'YYYY-MM-DD"T"HH24:MI:SS.FFZ')) AS timestamp FROM mde_history2;
说明:
YYYY匹配4位年份T对应字符串里的分隔符T(加双引号是为了明确标识这是固定字符,部分数据库可省略双引号)FF匹配小数秒(这里是两位毫秒,用FF2也可以,FF会自动适配任意位数的小数秒)Z对应末尾的UTC时区标识
方法2:直接利用数据库的自动解析能力
很多数据库(比如Snowflake)支持自动识别标准ISO 8601格式的时间串,不需要指定格式串,直接调用TRY_TO_TIMESTAMP即可:
SELECT COALESCE(TRY_TO_TIMESTAMP(last_check)) AS timestamp FROM mde_history2;
内容的提问来源于stack exchange,提问作者cyberoner1
相关产品推荐
相关产品推荐

