###方法一:直接拿字段比较
- (1)以下这两种方式最终效果一样
SELECT bb.borrow_no,bb.create_time FROM borrow bb WHERE bb.create_time>='2018-09-11 00:00:00';
SELECT bb.borrow_no,bb.create_time FROM borrow bb WHERE bb.create_time>='2018-09-11';
borrow_no | create_time |
---|---|
HLW-1000001621658826 | 2018-09-11 13:39:27 |
HLW-1000001587789196 | 2018-09-11 14:36:02 |
HLW-1000000818367793 | 2018-09-11 14:55:53 |
- (2)如何查询某一天(2018-09-10)
正确方法
SELECT bb.borrow_no,bb.create_time FROM borrow bb WHERE bb.create_time>='2018-09-10' and bb.create_time <='2018-09-11';
错误方法:
SELECT bb.borrow_no,bb.create_time FROM borrow bb WHERE bb.create_time='2018-09-10';
直接用时间字段去比较的时候,等号后面需要精确到原始时间的时分秒,2018-09-10 不能代表 2018-09-10 12:22:33
###方法二:查询最近几天的信息
程序中,如果查询最近几天的记录,就需要获取当前日期的时间,然后再动态生成最终结果,如果再把sql的时间都写死,最终就无法达到需求。
(1)函数now():
select NOW();
NOW() |
---|
2018-09-11 17:53:06 |
(2)函数CURRENT_DATE():
select CURRENT_DATE();
NOW() |
---|
2018-09-11 |
(3) 查询当日的记录(以下两种方式结果相同)
SELECT * FROM borrow bb WHERE DATE_FORMAT(bb.create_time, '%Y%m%d')=DATE_FORMAT(CURRENT_DATE(), '%Y%m%d' );
SELECT * FROM borrow bb WHERE TO_DAYS(bb.create_time)=TO_DAYS(now());
如上两种方式,都使用的等号=准确的表达了想要查询的时间段
(4)查询昨日的记录
SELECT * FROM borrow bb WHERE TO_DAYS( NOW( ) ) - TO_DAYS( bb.create_time) =1;
(5)查询近7天的数据(以下两种方式结果相同)
SELECT * FROM borrow bb WHERE TO_DAYS( NOW( ) ) - TO_DAYS( bb.create_time) <= 7;
SELECT bb.borrow_no,bb.create_time FROM borrow bb where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(bb.create_time);
(6)查询本月的数据
SELECT * FROM borrow bb WHERE DATE_FORMAT( bb.create_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' );
(7)查询上个月的数据
SELECT * FROM borrow bb WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( bb.create_time, '%Y%m' ) ) =1
有关时间的转换,还可以参考其他博客:
http://www.cnblogs.com/ggjucheng/p/3352280.html
https://blog.csdn.net/Yuan52007298/article/details/81584716