MySQL中的周(WEEK、YEARWEEK)

本文介绍了MySQL中WEEK和YEARWEEK函数的使用,讨论了一周的起始日设定,以及如何根据中国习惯调整计算周数的方法。通过示例展示了如何获取特定日期所在周数,强调在考虑年份时YEARWEEK函数的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文献:https://www.yiibai.com/mysql/week.html

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值