Sql语句中week()和mode参数的用法

在SQL中,WEEK() 函数用于从日期中提取周数,但其具体行为取决于 mode 参数。以下是详细说明(以 MySQL 为例):

1. WEEK() 函数的基本用法

语法:

WEEK(date, [mode])
  • date:日期或日期时间表达式(如 '2023-10-01')。

  • mode(可选):指定周的计算规则(默认值由系统变量 default_week_format 决定,通常为 0)。

2. mode 参数的作用

mode 定义了:

  • 一周从哪一天开始(周日或周一)。

  • 如何计算一年中的第一周(是否必须包含 >=4 天或仅需包含 1 月 1 日)。

3. mode 的取值与规则

MySQL 支持 mode 值为 0-7,具体规则如下:

Mode一周首日第一周规则周数范围
0周日包含 1 月 1 日的周0-53
1周一包含 >=4 天在本年的周0-53
2周日包含 >=4 天在本年的周1-53
3周一包含 >=4 天在本年的周1-53
4周日包含 >=4 天在本年的周0-53
5周一包含 1 月 1 日的周0-53
6周日包含 >=4 天在本年的周1-53
7周一包含 1 月 1 日的周1-53

ISO 8601 标准:对应 mode=3(周一为周首,第一周需有 >=4 天在本年)。

 

4. 示例

假设日期为 '2023-01-01'(星期日):

SELECT 
  WEEK('2023-01-01', 0) AS mode0, -- 返回 0(周首为周日,1月1日是周日,视为第0周)
  WEEK('2023-01-01', 3) AS mode3; -- 返回 1(周首为周一,第一周需有4天,2023年第一周从1月2日开始)

5. 注意事项

  • 默认模式:若不指定 mode,使用系统变量 default_week_format(通常为 0

  • 跨年周处理:年末的周可能属于下一年,建议结合 YEAR() 或使用 YEARWEEK(date, mode) 获取年和周组合(如 202301)。

  • 一致性:在报表或分组统计时,确保所有查询使用相同 mode

6. 使用建议

  • 国际业务推荐 mode=3(符合 ISO 8601)

  • 明确指定 mode 避免歧义,例如: 

SELECT YEAR(date), WEEK(date, 3) FROM table;

SELECT YEARWEEK(date, 3) FROM table; -- 返回格式如 202301

 通过合理设置 mode,可确保周数计算符合业务需求。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值