1. 程式人生 > >mysql中根據當前日期計算週一和週日,存在的問題

mysql中根據當前日期計算週一和週日,存在的問題

在資料統計分析的時候,有時候需要計算本週的一些資料情況,比如本週的訪問情況,已知條件是當前日期curdate(), 那麼如果需要計算本週的訪問情況的話,那麼就需要計算本週的週一的日期,本週的週日的日期,計算方法如下:

select subdate(curdate(),date_format(curdate(),'%w')-1) #//獲取當前日期在本週的週一
select subdate(curdate(),date_format(curdate(),'%w')-2) #//獲取當前日期在本週的週二
select subdate(curdate(),date_format(curdate(),'%w')-7) #//獲取當前日期在本週的週日

#2018-02-01 是星期四
select subdate(str_to_date('2018-02-01','%Y-%m-%d'),date_format(str_to_date('2018-02-01','%Y-%m-%d'),'%w')-1) # 2018-01-29 正確
select subdate(str_to_date('2018-02-01','%Y-%m-%d'),date_format(str_to_date('2018-02-01','%Y-%m-%d'),'%w')-7) #2018-02-04正確
select subdate(str_to_date('2018-01-29','%Y-%m-%d'),date_format(str_to_date('2018-01-29','%Y-%m-%d'),'%w')-1) # 2018-01-29 正確

比如:當前日期是2018-02-01 本星期的星期四,那麼計算本週的週一日期是:2018-01-29,本週的週日日期是:2018-02-04 這種情況下計算是正確的。

但是當前日勤是週日,我們來計算本週的週一和週日,就會存在問題了:

我們使用2018-02-04 是星期天來計算本週的週一和週日,結果如下:

#2018-02-04 是星期天

=================================================================================================
#2018-02-05 錯誤,正確應該是 2018-01-28
select subdate(str_to_date('2018-02-04','%Y-%m-%d'),date_format(str_to_date('2018-02-04','%Y-%m-%d'),'%w')-1) #2018-02-05 錯誤
select subdate(str_to_date('2018-02-04','%Y-%m-%d'),date_format(str_to_date('2018-02-04','%Y-%m-%d'),'%w')-7) #2018-02-11 錯誤

發現計算得來的本週週一是:2018-02-05

本週的週日是:2018-02-11。  已經是下一週的時間了。

我又使用週一到週六每個日期去計算本週的週一和週日,發現計算都是正確的,只有噹噹前日期是週日的時候,計算出來的本週週一和週日都是下一週的。遇到這種情況,就要看我們的需要了,如果還是希望當前日期是週日,然後計算出來的日期是本週的,那麼久需要另外處理了。

坑:當前日期是本週週日,計算本週的週一和週日的日期存在的問題!!!!!!!