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

MySQL中如何从varchar类型日期列筛选2018年5月的数据

解决MySQL中varchar类型日期的筛选问题(2018年5月数据)

嘿,我来帮你搞定这个需求!你的added_date字段是varchar类型,存的是mm/dd/yyyy格式的日期,要筛选2018年5月的数据,这里有两种实用的方法,看你需求选:

方法一:直接字符串匹配(简单快速)

因为你的日期格式是固定的mm/dd/yyyy,2018年5月的记录要么是5/xx/2018(月份是一位数),要么是05/xx/2018(月份是两位数),所以直接用字符串匹配就能搞定:

用LIKE语句的写法:

SELECT * 
FROM 你的表名
WHERE added_date LIKE '5/%/2018' OR added_date LIKE '05/%/2018';

要是想更简洁点,用正则表达式覆盖两种月份格式:

SELECT * 
FROM 你的表名
WHERE added_date REGEXP '^[0]?5/.*2018$';

这个正则的意思是:开头可以是可选的0,接着是5和斜杠,后面随便什么内容,最后以2018结尾,完美匹配所有2018年5月的记录。

方法二:转成日期类型筛选(更严谨)

如果担心表里有格式不规范的记录(比如偶尔写错的日期),那最好先把字符串转成日期类型再筛选,这样更靠谱:

用STR_TO_DATE函数把varchar转成日期,再提取年份和月份判断:

SELECT * 
FROM 你的表名
WHERE YEAR(STR_TO_DATE(added_date, '%m/%d/%Y')) = 2018 
  AND MONTH(STR_TO_DATE(added_date, '%m/%d/%Y')) = 5;

也可以用日期范围来筛选,要是以后把字段改成DATE类型,这种写法还能利用索引提升效率:

SELECT * 
FROM 你的表名
WHERE STR_TO_DATE(added_date, '%m/%d/%Y') BETWEEN '2018-05-01' AND '2018-05-31';

这里要注意,STR_TO_DATE里的%m对应两位数月份,%d是两位数日期,%Y是四位数年份,哪怕你的月份是一位数,这个函数也能正确转换。

额外小建议

如果这个表经常要做日期相关的查询,建议把added_date改成DATE类型,这样不仅查询效率更高,还能避免格式错误的问题。修改语句如下:

ALTER TABLE 你的表名 MODIFY COLUMN added_date DATE;

不过改之前最好先检查一下有没有格式错误的记录,避免转换失败:

SELECT added_date 
FROM 你的表名
WHERE STR_TO_DATE(added_date, '%m/%d/%Y') IS NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:26:48