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

MariaDB中STR_TO_DATE转换德语日期返回NULL问题排查

问题原因及解决方法

核心原因

你的SQL转换失败返回NULL,主要是两个关键问题:

  1. 格式符不匹配:STR_TO_DATE的%M格式符默认匹配英文全称月份(如January),但你的日期存储的是德语月份(如Januar),自然无法识别匹配。
  2. 会话语言环境限制:即使格式符正确,MySQL默认会话的lc_time_names参数通常是英文(如en_US),不支持解析德语月份名称。

解决方法

方法1:设置德语会话语言后转换

先将当前MySQL会话的时间语言切换为德语,再用%M匹配德语月份全称:

-- 设置会话时间语言为德语
SET lc_time_names = 'de_DE';

-- 执行转换
SELECT datum,
       CAST(STR_TO_DATE(datum, '%d.%M.%Y') AS DATE) AS converted_date
FROM esf
WHERE ESF_ID = 44421;

如果你的日期里是德语月份缩写(如Jan),则把格式符换成%b即可。

方法2:手动替换德语月份为英文(无需修改会话设置)

如果无法修改会话参数,直接用REPLACE把德语月份替换成对应的英文,再进行转换:

SELECT datum,
       CAST(STR_TO_DATE(
           REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
               REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(datum,
               'Januar', 'January'),
               'Februar', 'February'),
               'März', 'March'),
               'April', 'April'),
               'Mai', 'May'),
               'Juni', 'June'),
               'Juli', 'July'),
               'August', 'August'),
               'September', 'September'),
               'Oktober', 'October'),
               'November', 'November'),
               'Dezember', 'December'),
           '%d.%M.%Y') AS DATE) AS converted_date
FROM esf
WHERE ESF_ID = 44421;

排查验证步骤

  1. 先查看测试条目的原始日期值:SELECT datum FROM esf WHERE ESF_ID = 44421;,确认月份是全称还是缩写,是否存在多余空格/特殊字符。
  2. 检查当前会话语言:SELECT @@lc_time_names;,如果返回en_US则说明语言环境不支持德语月份解析。

内容的提问来源于stack exchange,提问作者Stefan Bongers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:21:06