版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cherry_xiu/article/details/82117084
前言
每次前台传入关于时间的查询,我总是很纠结,数据库查询时,对于时分秒到底是如何处理的,特此总结,如有错误请指正!!!
可以先了解sqlDate与utilDate的区别java.util.Date 与 java.sql.Date 与 String 的转换
准备
mysql
SQL DATE(日期函数)
数据库的字段date格式,没有时分秒,datetime格式的,有时分秒
关于参数带时分秒的查询
mysql数据库数据(由于网上有人说datetime类型的数据,如果用不带时分秒的查是没有数据的,稍后测试oracle,现在测试mysql)
表结构
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`startDate` date DEFAULT NULL,
`endDate` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
数据
id | username | startDate | endDate |
---|---|---|---|
1 | 1 | 2018-05-22 | 2018-06-25 00:00:00 |
1 | 2 | 2018-05-22 | 2018-06-25 17:36:43 |
1 | 3 | 2018-05-22 | 2018-06-25 23:59:59 |
1 | 4 | 2018-05-22 | 2018-06-26 00:00:00 |
先测试date类型的startDate
select id from users where startDate <= :startDate
传入的startDate值 | 查询出来的id |
---|---|
2018-05-27 | 1,2,3,4 |
2018-05-22 | 1,2,3,4 |
2018-05-21 | 无 |
2018-05-27 00:00:00 | 1,2,3,4 |
2018-05-22 00:00:00 | 1,2,3,4 |
2018-05-21 00:00:00 | 无 |
测试datetime类型的endDate
select id from users where endDate <= :endDate
传入的endDate值 | 查询出来的id |
---|---|
2018-06-24 | 无 |
2018-06-25 | 1 |
2018-06-26 | 1,2,3,4 |
2018-06-24 23:59:59 | 无 |
2018-06-25 00:00:00 | 1 |
2018-06-25 23:59:59 | 1,2,3 |
2018-06-26 00:00:00 | 1,2,3,4 |
综上可知:
1)对于date类型,没有时分秒,就直接比较
2)对于datetime类型
2.1传入的参数没有带时分秒,如”2018-06-22”,则实际查询的”2018-06-22 00:00:00”
2.2传入的参数带了时分秒,则按时分秒计算
3)对于datetime类型,使用了date()函数
实际上是将数据库里的数据的时分秒给截取掉,