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

MySQL中CHAR转日期异常:CHAR(4)年份转换返回NULL

解决CHAR年份转日期返回NULL的问题

嘿,我来帮你理清这个问题!你遇到的NULL结果,本质是MySQL的STR_TO_DATE函数的特性导致的:它没法仅靠单独的年份字符串生成有效的日期值,因为DATE/DATETIME类型要求必须包含年、月、日三个核心组件,单独的年份不足以构造一个合法的日期对象。

给你两个实用的解决方案,按需选择:

  • 方案一:直接转成整数(推荐用于年份比较场景)
    如果你的需求只是把CHAR(4)的年份和DATETIME的年份做比较,完全没必要转成日期类型,直接把CHAR年份转成整数就好,效率还更高:

    SELECT id, CAST(year AS UNSIGNED) AS Year FROM elite_years LIMIT 100;
    

    和DATETIME字段对比时,用YEAR()函数提取DATETIME的年份再匹配:

    SELECT *
    FROM your_table
    WHERE CAST(elite_years.year AS UNSIGNED) = YEAR(your_datetime_column);
    
  • 方案二:补全日月信息生成合法日期
    如果确实需要得到一个DATE类型的值,你可以给年份字符串补全默认的月和日(比如1月1日),这样STR_TO_DATE就能生成有效的日期了:

    SELECT id, STR_TO_DATE(CONCAT(year, '-01-01'), '%Y-%m-%d') AS Year_Date FROM elite_years LIMIT 100;
    

    生成的结果会是类似2023-01-01的DATE值,之后和DATETIME比较时,可以用DATE()或者YEAR()函数来匹配。

简单总结下:STR_TO_DATE的格式符需要和输入字符串的结构完全对应,且必须能构造出合法的日期。单独的%Y没有对应的月日信息,所以只能返回NULL。

内容的提问来源于stack exchange,提问作者Brendan O'Sullivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:44:12