MySQL中的周(WEEK、YEARWEEK)

mysql中,一週默認是從週日~週一的,這和國外的習慣一樣,而中國是週一~週日算一週。所以在統計諸如“本週的數據”時,就需要特殊注意。

看到很多網上的文章,在處理這個點上寫很多代碼,其實mysql提供的WEEK和YEARWEEK函數中已經考慮到了這一點。

WEEK函數介紹

通常,一年的正常年份爲365天,閏年爲366天。一年又可以分爲許多周,每週有7天。 所以一年,我們經常有365/7 = 52周,周範圍是從1到52。

要查看給定日期屬於哪個週數,您可以使用WEEK函數,如下所示:

WEEK(date, mode);

WEEK函數接受兩個參數:

  • date是要獲取週數的日期。
  • mode是一個可選參數,用於確定週數計算的邏輯。它允許您指定本週是從星期一還是星期日開始,返回的週數應在0到52之間或0到53之間。

如果忽略mode參數,默認情況下WEEK函數將使用default_week_format系統變量的值。

要獲取default_week_format變量的當前值,請使用SHOW VARIABLES語句如下:

  1. mysql> SHOW VARIABLES LIKE 'default_week_format';
  2. +---------------------+-------+
  3. | Variable_name | Value |
  4. +---------------------+-------+
  5. | default_week_format | 0 |
  6. +---------------------+-------+
  7. 1 row in set

在我們的服務器中,default_week_format的默認值爲0,下表格說明了mode參數如何影響WEEK函數:

模式

一週的第一天

範圍

0

星期日

0-53

1

星期一

0-53

2

星期日

1-53

3

星期一

1-53

4

星期日

0-53

5

星期一

0-53

6

星期日

1-53

7

星期一

1-53

上表中“今年有4天以上”表示:

  • 如果星期包含1月1日,並且在新的一年中有4天或更多天,那麼這周是今年的第1周。
  • 否則,這一週的數字是前一年的最後一週,下週纔是今年的第1周。

所以在需要考慮年份的時候,使用YEARWEEK函數更加恰當。

示例

我們按照中國的習慣,把週一算成一週的第一天,分別通過WEEK函數和YEARWEEK函數來獲取2019-07-11所在的周

select WEEK('2019-07-11',1);

返回值是28

select YEARWEEK('2019-07-11',1);

返回值是201928

參考文獻:https://www.yiibai.com/mysql/week.html

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