mysql 對取當前日期周一和週日語句的詳細解析

2021-07-11 05:00:03 字數 1195 閱讀 8757

網上對於用mysql取當前日期周一和週日的方法非常多,但基本上都只有乙個方法,沒有什麼解釋,後果就是會用,但為什麼要這樣用,就不一定知道了。

自己研究了下,寫點東西,避免遺忘

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

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

這兩句語句是mysql用來取當前日期的周一或週日的乙個方法,那麼這句如何運作的呢?

%w 是以數字的形式來表示週中的天數( 0 = sunday, 1=monday, . . ., 6=saturday),0為週日,6為週六,跟我們一般的認知,一周是從周一開始的並不一樣。

date_format是乙個日期轉換函式

date_format(curdate(),'%w')表示當前日期到上週週日共有幾天的間隔,即當前日期減去上週週日的日期=天數(例:curdate()為2011-01-11,那麼上週週日為2011-01-09,兩者相減為2)所以若單獨輸出這一句:select date_format(curdate(),'%w') 結果就是2

在mysql api裡對於subdate函式是這樣解釋的:

select subdate(now( ), 1) as 'yesterday',

subdate(now( ), interval -1 day) as 'tomorrow';

正值為昨天,負值為明天,當前時間的起點,就是當前時間的上週週日

subdate函式就是用當前時間減去2天,得到上週週日的時間為2011-01-09

那麼如果執行select subdate(curdate(),date_format(curdate(),'%w')-2)這句,就表示用當前時間-(2-2),即-0,得到的結果就是當前日期本身了。

如果把%w換成%d呢

%d 是用兩位數字來表示月中的天數( 00, 01, . . ., 31)

直接輸出的結果就應該是11,表示當前日期在乙個月內是第幾天

select date_format('2011-01-11','%d')

放到開始的語句裡就表示用當前時間減去11,結果為2010-12-31

select subdate('2011-01-11',date_format('2011-01-11','%d'))

mysql 對取當前日期周一和週日語句

1 查詢當天的資料 select from 表名 where to days 時間字段 to days now 2 查詢當周的資料 select from 表名 where yearweek date format 時間字段,y m d yearweek now 3 查詢當月的資料 select f...

mysql 對取當前日期周一和週日語句的詳細解析

網上對於用mysql取當前日期周一和週日的方法非常多,但基本上都只有乙個方法,沒有什麼解釋,後果就是會用,但為什麼要這樣用,就不一定知道了。自己研究了下,寫點東西,避免遺忘 select subdate curdate date format curdate w 1 獲取當前日期在本週的周一 sel...

計算當前日期所在周的周一和週日

根據日期計算所在周的周一和週日 param time 指定的日期 private static void convertweekbydate date time system.out.println 要計算日期為 sdf.format cal.gettime 輸出要計算日期 cal.setfirst...