mysql動態查詢上周的數據


between and 邊界值問題


 

工作中你是否遇到過這樣的場景:每周周一導出上周的收入報表,支出報表,或者某個業務的數量。

當查詢條件中包含時間段時,自然就想到了使用between ... and ...,那么between ... and ... 的查詢是否包括兩端的邊界值呢?

首先可以給出肯定的答案:between ... and ... 是包括邊界值的!

不論是用在數值上(between 300 and 500),或是時間上(between '2018-02-19' and '2018-02-26')

mysql的手冊中描述如下

expr BETWEEN min AND max

expr大於或等於 min 且expr 小於或等於max, 

上述關系相當於表達式 (min <= expr AND expr <= max)

 

用於時間需注意


 

首先介紹兩個用在mysql中用於計算日期的函數:

DATE_ADD(date,INTERVAL expr type)  –加法 ,取得的是date之后的日期

DATE_SUB(date,INTERVAL expr type)  –減法,取得的是date之前的日期

例如我們想要查詢上周(20180219-20180225)的數據,當前時間是20180226,我們使用BETWEEN date_sub(curdate(),interval 7 day) AND curdate() ,

這種寫法中curdate()顯示2018-02-26,其實是2018-02-26 00:00:00,如果在2018-02-26 00:00:00恰好有一條數據,也是會被查出來的

所以如果要在周一時查出上周周一到周日的數據,使用>= date_sub(curdate(),interval 7 day) and < curdate(),或者使用mysql的YEARWEEK函數,

例如:YEARWEEK(date_format(queryTime,'%Y-%m-%d')) = YEARWEEK(now())-1 (查詢上周)

 

date_format的使用


 

curdate()只寫到日期,例如'2018-02-26',沒有后面的時分秒,如果使用DATE_FORMAT()函數將其格式化(DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s')),可以發現時分秒默認都是00:00:00,

上面DATE_FORMAT()中的參數解讀:

%Y:年,4位
%m:月,數值(00-12)
%d:月的天,數值(00-31)
%H:小時 (00-23)
%i:分鍾,數值(00-59)
%s:秒(00-59)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM