如何将XML格式的日期转换为合法的SQL datetime格式?
XML ISO 8601 日期转SQL合法datetime格式方案
你需要转换的2021-08-26T00:25:26.737185Z属于ISO 8601标准的UTC时间格式,主流数据库和编程语言都原生支持该格式的解析,无需手动拆分字符串处理,对应解决方案如下:
数据库层面直接转换方案
MySQL / MariaDB
使用STR_TO_DATE函数指定匹配格式即可支持微秒级精度转换:SELECT STR_TO_DATE('2021-08-26T00:25:26.737185Z', '%Y-%m-%dT%H:%i:%s.%fZ');如需转换为本地时区时间,可嵌套
CONVERT_TZ函数处理时区偏移。SQL Server
原生识别该ISO格式,直接写入DATETIME2类型字段即可,无需额外转换:INSERT INTO 表名 (日期字段) VALUES ('2021-08-26T00:25:26.737185Z');若使用旧版本
DATETIME类型精度不足,可显式转换:SELECT CAST('2021-08-26T00:25:26.737185Z' AS DATETIME2);PostgreSQL
原生支持ISO 8601格式,直接写入TIMESTAMPTZ(带时区时间戳)字段即可,会自动识别末尾的Z标识为UTC时区:INSERT INTO 表名 (日期字段) VALUES ('2021-08-26T00:25:26.737185Z'::timestamptz);Oracle
使用TO_TIMESTAMP_TZ函数指定格式完成转换:SELECT TO_TIMESTAMP_TZ('2021-08-26T00:25:26.737185Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF"TZR') FROM DUAL;
程序层面预转换方案
若你需要在业务代码中先完成格式转换再写入数据库,主流编程语言的处理方式如下:
- Python:使用
datetime内置方法直接解析from datetime import datetime date_obj = datetime.fromisoformat(xml_date_str.replace('Z', '+00:00')) - Java:使用
Instant类直接解析UTC格式,再转为JDBC兼容的Timestamp对象import java.time.Instant; import java.sql.Timestamp; Timestamp date = Timestamp.from(Instant.parse(xmlDateStr)); - C#:直接用
DateTimeOffset解析DateTimeOffset date = DateTimeOffset.Parse(xmlDateStr);
内容的提问来源于stack exchange,提问作者Maik Hasler
相关产品推荐
相关产品推荐

