You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何加载日期格式为%W %e, %Y的XML数据并正确转换为日期类型

解决MySQL加载XML文件时末尾日期列转换为NULL的问题

问题根因

  • 多SET语法错误:LOAD XML语句的SET子句仅需声明1次,多个列赋值直接用逗号分隔即可,重复写第二个SET关键字会直接触发语法报错,正确的赋值写法为SET date1= STR_TO_DATE(@ddate1,'%M %e, %Y'), date2= STR_TO_DATE(@date2,'%M %e, %Y')
  • 单字段转换仍为NULL的原因:需同时满足两个条件:一是XML中的对应日期字段正确映射到了@ddate1、@date2两个用户变量;二是XML里的日期字符串格式完全匹配%M %e, %Y规则,该格式对应「月份英文全拼 + 空格 + 日期数字 + 逗号 + 空格 + 四位年份」,例如October 12, 2023,如果存在月份缩写、分隔符不符、日期顺序不对等情况,STR_TO_DATE都会返回NULL。

无需逐个列出全量字段的实现方案

只要你的表前23个非日期列和XML节点的字段顺序/名称完全匹配,仅需在语句末尾指定两个日期列映射为变量再转换即可,完整参考语句如下:

LOAD XML INFILE '/path/to/your/file.xml'
INTO TABLE 你的目标表名
ROWS IDENTIFIED BY '<你的行节点名称>'
-- 仅声明最后两列映射到变量,前23列自动匹配
(@ddate1, @date2)
SET date1 = STR_TO_DATE(@ddate1, '%M %e, %Y'),
    date2 = STR_TO_DATE(@date2, '%M %e, %Y');

如果XML和表字段是按名称映射而非按顺序映射,可补充配置COLUMNS IDENTIFIED BY '<列节点名称>',同样不需要列出所有非日期字段。
如果转换后仍为NULL,可根据XML实际的日期格式调整STR_TO_DATE的格式符,例如月份缩写用%b、数字月份用%m、日期补零用%d等。

内容的提问来源于stack exchange,提问作者Rob Campbell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:51:00