一枚小产品的学习记录

在做sql练习题时了解到的新函数,做个简要的记录,因非技术人员(专业人士),可能会存在一定的局限性,若有不严谨的地方,请指正。

在日常的业务统计需求中,可能会有类似查询“某一日是今年第几周“的需求。mysql提供了week(date,mode)函数来满足此种需求。

其中2个参数分别为:

date:date是要获取周数的日期,比如2020-01-04,记得要加引号,若不加引号也不会报错,会返回null。

mode: mode是计算逻辑的参数,用于确定周数计算的逻辑。看了众多资料,统一认定mode的参数为0到7这8个参数,也就是8种计算逻辑。

但是我尝试了8-15也不会报错,且返回了合理的值,经个人多次验证及推测,底层会将mode对8取模。最终的mode参数为mod(mode,8) 。备注:本人的mysql为8.0.21版本。

mode可不写,其默认参数为:0, 可通过设置全局变量来修改该值。

至于为何要有mode这个参数呢,我想主要是为了符合各种统计逻辑的需求,因为按照不同的计算逻辑,特定的某一天会属于不同的周。

举2个最简单的例子:

1;有些人把周日当成一周的第一天,有些人把周一当成一周的第一天。

2:有些人把新年的第一个周日到第二个周日算作新年的第一周,不会去考虑其他因素。

有些人则认为从1月1日起到下一个周日的天数若大于3天则这几天算为一周,若小于3天则这几天算为第0周,或者这

几天算作去年的最后一周。

所以可以看出因为计算逻辑的不统一,会造成统计误差。

因此mysql提供了8种计算逻辑,来满足各种统计需求。

下表为各种模式的具体解释:

image.png

那么我以2021年1月2日举下例子:

日历如下:

image.png

测试如下:

SELECT WEEK('2021-01-02',0) #运行结果:0

SELECT WEEK('2021-01-02',1) #运行结果:0

SELECT WEEK('2021-01-02',2) #运行结果:52

SELECT WEEK('2021-01-02',3) #运行结果:53

当模式为0时,对照模式表可以得知其计算逻辑是:把星期日当做一周的第一天,且第一周是以2021年的第一个星期日开始的,且在2021年的第一个星期日前那些属于2021年的天数都归为第0周。而2021年1月2日是2021年第一个星期日之前的日期,所以返回的结果是0。

当模式为1时,对照模式表可以得知其计算逻辑是:把星期一当做一周的第一天,且1月1日到本年第一个周一的天数超过3天,则认定这几天处于本年的第1周,若天数没超过3天(不足4天),则认定这几天处于本年的第0周。而2021年1月1日到第一个周一(2021年1月4日)只有3天(即1月1日、1月2日、1月3日)。所以认定这几天属于2021年的第0周,所以返回的结果为0。

当模式为2时,对照模式表可以得知其计算逻辑是:把星期日当做一周的第一天,且第一周是以2021年的第一个星期日开始的,前面的日期都算作上年度的最后一周(而模式0则是把这几天算作为第0周)。而2021年1月2日是2021年第一个星期日之前日期,所以认定这几天属于2020年的最后一周(2020年的第52周),所以返回的结果为52。备注也就是说2020年的日期也是默认使用2这种模式来计算的。

其他的模式就不做详细说明了,大家自己去验证吧~

mysql week函数参数_MySQL week()函数详解相关推荐

  1. 如何查看mysql备份的情况_MySQL数据库备份详解(示例代码)

    原文:MySQL数据库备份详解 对于任何数据库来说,备份都是非常重要的 数据库复制不能取代备份的作用 比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据 ...

  2. mysql 用户管理表_Mysql—用户表详解(mysql.user)

    MySQL 数据库 Mysql-用户表详解(mysql.user) MySQL是一个多用户管理的数据库,可以为不同用户分配不同的权限,分为root用户和普通用户,root用户为超级管理员,拥有所有权限 ...

  3. Python函数参数之*与**用法详解

    首先,我们来看一个函数定义: def f(a,*b,**c):print(f'a:{a},b:{b},c:{c}') *b与**c都是可变参数 出现带一个星号的参数 b,这是可变位置参数 带两个星号的 ...

  4. python 函数参数self_python self用法详解

    对于在类体中定义的实例方法,Python 会自动绑定方法的第一个参数(通常建议将该参数命名为 self),第一个参数总是指向调用该方法的对象.根据第一个参数出现位置的不同,第一个参数所绑定的对象略有区 ...

  5. mysql 字段类型 负数_MySQL字段类型详解

    MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...

  6. mysql myisam表分区_MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表 ...

  7. mysql distinct效率优化_mysql distinct 用法详解及优化

    本事例实验用表task,结构如下 MySQL> desc task; +-------------+------------+------+-----+-------------------+- ...

  8. mysql binlog sql统计_mysql的binlog详解

    binlog是mysql记录操作的二进制日志文件,有三种格式可选,但是老旧的SBR已经不适合现在大多数业务需求,所以大多数都建议用MBR和RBR,即mixed或row,而解析他的原因,几乎都只有一个, ...

  9. mysql as 后面字段_mysql 字段as详解及实例代码

    mysql 字段使用as 在mysql中,select查询可以使用AS关键字为查询的字段起一个别名,该别名用作表达式的列名,并且别名可以在GROUP BY,ORDER BY或HAVING等语句中使用. ...

最新文章

  1. MPB:林科院袁志林组-​枫香-真菌互作培养体系构建
  2. linux优化网页加载过程,HTML页面加载和解析流程 介绍
  3. 115网盘如何打开php文件格式,115网盘下载:因纽特语教材(初级+高级+音频)
  4. 浅析Web2.0技术
  5. 优化DOTTEXT之三:完善Trackback
  6. php多个表中查找数据_HeidiSQL 免费的可视化数据库管理工具
  7. python只能对列表进行切片_Python中的列表
  8. SAP License:SAP财务管理的认识
  9. 翻译 Windows Server 2016和System Center 2016 技术预览版4 使创新更容易
  10. EVENT:10228 trace application of redo by kcocbk
  11. pr计算机相关知识,影视制作技术第一讲认识premiere(pr)与视频基础知识.ppt
  12. 医药电子 | 温度传感器的类型原理特点和应用
  13. SEO快速排名,关键词快速排名软件,到底靠谱不靠谱
  14. 用max的角度来解析blender建模!
  15. 麻省理工学院计算机科学与工程博士,2020年麻省理工学院博士读几年
  16. linux内核irq,linux kernel的中断子系统之(四):High level irq event handler
  17. 你的朋友国庆假期都去了哪里玩?微信大数据告诉你!最远的朋友圈签到竟然来自……
  18. katalon错误: System could not generate internal.GlobalVariable file normally.
  19. json spirit_Spirit App:Web实时轻松动画
  20. Master in Vocab -- Day Four

热门文章

  1. Python(2)变量声明、变量类型
  2. [转载]丢掉鼠标-Mac神软Alfred使用手册1_我是亲民_新浪博客
  3. virtualBox 虚拟机安装Windows7系统
  4. 通过硬盘iso文件安装ubuntu
  5. hbuilder 断点_Hbuilder配置php断点调试
  6. apidoc写php接口文档
  7. this指向,并改变this指向
  8. C语言 static 声明静态变量?大佬原来用它干这事!
  9. 认证 (authentication) 和授权 (authorization) 的区别(通俗易懂!!)
  10. 基于jQuery实现弹幕效果