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

如何查询1970至1990年出生用户的姓名与地址,现有SQL无结果如何解决

问题原因及解决方案

核心错误点

  • 你使用的str_to_date参数格式不匹配:指定的解析格式是%m/%d/%Y(斜杠分隔、4位年份),但传入的边界日期用的是逗号分隔的1,1,70,且年份为2位,导致解析结果为NULL,查询条件永远不成立,所以无返回结果。
  • 额外校验:如果你的date_of_birth字段存储的是2位年份,需要把格式符里的%Y改为%y,%Y对应4位年份,%y对应2位年份。

修正后的查询语句

如果date_of_birth是月/日/4位年格式(比如12/25/1980),使用以下语句:

select name, address
from user
where str_to_date(`date_of_birth`, '%m/%d/%Y') > '1970-01-01'
and str_to_date(`date_of_birth`, '%m/%d/%Y') < '1990-01-01'

如果date_of_birth是月/日/2位年格式(比如12/25/80),调整格式符即可:

select name, address
from user
where str_to_date(`date_of_birth`, '%m/%d/%y') > '1970-01-01'
and str_to_date(`date_of_birth`, '%m/%d/%y') < '1990-01-01'

校验&优化建议

  • 先执行测试语句确认日期解析是否正常,避免格式不匹配问题:
    select `date_of_birth`, str_to_date(`date_of_birth`, '%m/%d/%Y') as parsed_date from user limit 10;
    
    如果返回的parsed_date为NULL,说明date_of_birth的实际存储格式和%m/%d/%Y不匹配,调整为对应格式符即可,常见格式还有%Y-%m-%d、%d/%m/%Y等。
  • 长期使用建议将date_of_birth字段改为DATE类型存储,避免每次查询的字符串转日期性能损耗,也能从根源避免格式不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:02