獲取週一到今日(本週)以及上週一到上週日(上週)的數據

背景:做報表,需要使用sql(Mysql數據庫)查出本週一到今日,以及上週一到上週日的數據。

問題:以週一爲第一天,選擇本週,獲取從週一到週日的數據。選擇上週,展示從上週一到上週天的的數據範圍。

過程描述:從網上查技術博客,很多人都是直接粘貼的,實際上根本沒考慮:如果當前爲周天,那麼獲取的本週一其實是明天的日期。這個原因是因爲mysql數據庫默認實用的日期規範是西方的,我國每週的第一天是從週一開始的而西方是從周天開始的,所以,如果當前日期是周天,那麼獲取的本週週一,查出的結果是明天。

解決辦法:使用YEARWEEK(date,model)方法,這個方法是輸入一個日期,然後得出該日期在這一年的所在周,這個結果是可以直接進行比較的,比如本週的週三和週四進行比較,結果是相等的,所以可以用來查詢數據。那麼解決問題的辦法,是依賴YEARWEEK變更計算模式,使用:

 YEARWEEK(DATE_FORMAT(create_date,'%Y-%m-%d'),1)

 意思是 輸入 create_date,轉換成年月日的格式,然後通過模式1(指定每週的週一爲第一天),輸出年份和當前日期所在的週數。

接下來,就簡單了,進行比較:

 YEARWEEK(DATE_FORMAT(create_date,'%Y-%m-%d'),1) = YEARWEEK(NOW(),1);

 這個查的是,數據所在年份週數 等於 當前日期(不需要獲取周天的日期)所在的年份週數。

來一個完整的:

本週一到週日

SELECT * FROM task  WHERE 
 YEARWEEK(DATE_FORMAT(create_date,'%Y-%m-%d'),1) = YEARWEEK(NOW(),1);

 上週一到週日(當前所在周-1)

SELECT * FROM task  WHERE 
 YEARWEEK(DATE_FORMAT(create_date,'%Y-%m-%d'),1) = YEARWEEK(NOW(),1)-1;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章