1. 程式人生 > >mysql查詢:有關時間的篩選

mysql查詢:有關時間的篩選

方法一:直接拿欄位比較

  • (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)查詢近2天的資料(以下兩種方式結果相同)

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