mysql可以比较时间吗


本文摘自PHP中文网,作者(*-*)浩,侵删。

在mysql中可以实现比较时间,其语句如【 SELECT testdate FROM t1 WHERE testdate >= '2018-09-12';SELECT testdate FROM t1 WHERE testdate >= 20180912;】。

最近发现自己一直以来经常用一种错误的方法在比较日期,例如一下语句,a字段是一个DATETIME类型的列:

select a from t1 where DATEDIFF(a, '2018-09-11') < 0;

该语句是为了查出2018-09-11 日期之前的所有记录,但这个语句有个问题,如果a字段加了索引,用这种类型进行日期对比,会导致查询不走索引,从而使查询性能下降。

推荐课程:MySQL教程。

看了Mysql关于日期字段对比的文档。在进行日期比较的时候,mysql会自动将日期转换成数字进行比较。where条件后,使用字符串格式日期与DATE,DATETIME,TIMESTAMP,TIME类型字段进行比较的时候,对字符串格式要求不严格,你可以使用任意格式的分隔符来表示日期,例如"2018-09-11","2018#09#11","2018&09&11"对于mysql来说,都是相同的日期。如果没有分隔符,例如"20180911",与"2018-09-11"或其他有分隔符的日期,也是相同的。例如下图

1

2

3

4

5

6

7

8

select a from t1 where a < '2018#09#11';

select a from t1 where a < '2018-09-11';

select a from t1 where a < '20180911';

所代表的意义是相同的,都是查询日期小于2018年9月11日的数据

也就是说上图的查询语句,完全可以重写为,这么做的好处?就是会使用索引,是查询更快

select a from t1 where a < '2018-09-11';

当将日期类型字段与字符串型日期进行<,>,>=,<=,between比较的时候,Mysql会将字符串类型日期转换成长整型数字进行比较,从而加快查询速度。

下面三种情况除外:

1,两个表格字段的对比;

2,日期类型字段与表达式对比;

3,使用表达式对日期类型字段进行对比;

原因:对于以上三种情况,mysql会将日期转换为字符串进行比较。

阅读剩余部分

相关阅读 >>

mysql 1130异常,无法远程登录解决方案详解

mysql 没有varchar(max) 类型

mysql中char和varchar数据类型的区别是什么

mysql的重装问题解决方法

mysql百万级数据量分页查询方法及其优化建议

mysql8.0.20下载安装及遇到的问题(图文详解)

navicat for mysql定时备份数据库及数据恢复操作

mysql索引提高查询效率的原因何在

初始化mysql的数据库失败怎么办

mysql精讲之六:流程控制

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...