SQL中将带时分秒的日期转为仅日期格式及范围查询问题
问题解决方法
1. 转换日期字符串为纯日期格式
如果使用MySQL,可通过两种方式提取纯日期:
- 直接截取前10位字符(适配你的
MM-DD-YYYY开头格式):
SELECT SUBSTRING(`date`, 1, 10) AS pure_date FROM `doc_history`;
- 解析为日期类型后格式化(更稳妥,适配完整日期字符串结构):
SELECT DATE_FORMAT(STR_TO_DATE(`date`, '%m-%d-%Y %a %h:%i:%s %p'), '%m-%d-%Y') AS pure_date FROM `doc_history`;
参数说明:
%m:两位月份,%d:两位日期,%Y:四位年份%a:缩写星期(如Mon),%h:12小时制小时,%i:分钟,%s:秒,%p:AM/PM标识
2. 修正范围查询语句
将字段转换为标准日期格式后再做范围比较,确保按日期逻辑筛选:
SELECT * FROM `doc_history` WHERE STR_TO_DATE(`date`, '%m-%d-%Y %a %h:%i:%s %p') BETWEEN STR_TO_DATE('07-13-2020', '%m-%d-%Y') AND STR_TO_DATE('07-20-2020', '%m-%d-%Y');
这种方式直接用日期类型比较,比字符串对比更精准。
3. 长期优化建议
若该表需频繁按日期查询,建议将date字段类型修改为DATE或DATETIME,存储时直接存入标准日期格式,避免每次查询都做字符串转换,提升查询效率。
内容的提问来源于stack exchange,提问作者Mike Ahren Rances
相关产品推荐
相关产品推荐

