- WEEK(date[,mode])
该函数返回date 对应的星期数。WEEK() 的双参数形式允许你指定该星期是否起始于周日或周一, 以及返回值的范围是否为从0 到53 或从1 到53。若 mode参数被省略,则使用default_week_format系统自变量的值。请参见5.3.3节,“服务器系统变量”。
以下表说明了mode 参数的工作过程:d
|
|
第一天 |
|
|
|
Mode |
工作日 |
范围 |
Week 1 为第一周 ... |
|
0 |
周日 |
0-53 |
本年度中有一个周日 |
|
1 |
周一 |
0-53 |
本年度中有3天以上 |
|
2 |
周日 |
1-53 |
本年度中有一个周日 |
|
3 |
周一 |
1-53 |
本年度中有3天以上 |
|
4 |
周日 |
0-53 |
本年度中有3天以上 |
|
5 |
周一 |
0-53 |
本年度中有一个周一 |
|
6 |
周日 |
1-53 |
本年度中有3天以上 |
|
7 |
周一 |
1-53 |
本年度中有一个周一 |
mysql> SELECT WEEK('1998-02-20');
-> 7
mysql> SELECT WEEK('1998-02-20',0);
-> 7
mysql> SELECT WEEK('1998-02-20',1);
-> 8
mysql> SELECT WEEK('1998-12-31',1);
-> 53
注意,假如有一个日期位于前一年的最后一周, 若你不使用2、3、6或7作为mode 参数选择,则MySQL返回 0:
mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
-> 2000, 0
有人或许会提出意见,认为 MySQL 对于WEEK() 函数应该返回 52 ,原因是给定的日期实际上发生在1999年的第52周。我们决定返回0作为代替的原因是我们希望该函数能返回“给定年份的星期数”。这使得WEEK() 函数在同其它从日期中抽取日期部分的函数结合时的使用更加可靠。
假如你更希望所计算的关于年份的结果包括给定日期所在周的第一天,则应使用 0、2、5或 7 作为mode参数选择。
mysql> SELECT WEEK('2000-01-01',2);
-> 52
作为选择,可使用 YEARWEEK()函数:
mysql> SELECT YEARWEEK('2000-01-01');
-> 199952
mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);
-> '52'
- WEEKDAY(date)
返回date (0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引 weekday index for
mysql> SELECT WEEKDAY('1998-02-03 22:23:00');
-> 1
mysql> SELECT WEEKDAY('1997-11-05');
-> 2
- WEEKOFYEAR(date)
将该日期的阳历周以数字形式返回,范围是从1到53。它是一个兼容度函数,相当于WEEK(date,3)。
mysql> SELECT WEEKOFYEAR('1998-02-20');
-> 8
- YEAR(date)
返回date 对应的年份,范围是从1000到9999。
mysql> SELECT YEAR('98-02-03');
-> 1998
- YEARWEEK(date), YEARWEEK(date,start)
返回一个日期对应的年或周。start参数的工作同 start参数对 WEEK()的工作相同。结果中的年份可以和该年的第一周和最后一周对应的日期参数有所不同。
mysql> SELECT YEARWEEK('1987-01-01');
-> 198653
注意,周数和WEEK()函数队可选参数0或 1可能会返回的(0) w有所不同,原因是此时 WEEK() 返回给定年份的语境中的周。
-
-> '1997-10-07'
