如何将VARCHAR存储的ISO格式UTC datetime转为DATE类型日期时间
VARCHAR类型ISO UTC时间戳转常规日期时间类型实现方案
注意:多数数据库的纯
DATE类型仅存储年、月、日维度信息,不支持时分秒保留。如果需要输出2021-04-22 17:06:59这类带时间的结果,需要使用数据库对应的日期时间类型(如DATETIME、TIMESTAMP)存储,而非纯DATE类型。
原VARCHAR存储值为标准ISO 8601格式UTC时间:'2021-04-22T17:06:59.391Z',以下是各常用数据库的转换写法:
MySQL 环境
- 用嵌套内置函数处理字符串后解析为DATETIME类型即可,无额外依赖:
SELECT STR_TO_DATE( -- 逐次移除字符串中的T分隔符、Z时区标识、毫秒值 REPLACE( REPLACE( REPLACE(your_varchar_col, 'T', ' '), 'Z', '' ), CONCAT('.', SUBSTRING_INDEX(your_varchar_col, '.', -1)), '' ), -- 按标准格式解析为日期时间类型 '%Y-%m-%d %H:%i:%s' ) AS converted_datetime FROM your_table; - 转换后输出值天然匹配
yyyy-MM-dd HH:mm:ss格式;如果有跨时区展示需求,可额外搭配CONVERT_TZ()函数调整为业务所在时区。
PostgreSQL 环境
- 适配ISO格式的内置解析能力,写法更简洁:
SELECT TO_TIMESTAMP(your_varchar_col, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')::TIMESTAMP AS converted_datetime FROM your_table; - 转换后自动去除毫秒值和时区标识,得到不带时区的标准日期时间值。
SQL Server 环境
- 用带格式代码的类型转换函数直接处理:
SELECT CONVERT(DATETIME, your_varchar_col, 127) AS converted_datetime FROM your_table; - 格式代码
127专门适配带T、Z后缀的ISO 8601 UTC时间字符串,转换后输出完全匹配要求的格式。
内容的提问来源于stack exchange,提问作者Abhijeet Deshmukh
相关产品推荐
相关产品推荐

