MySql之yearweek(date,mode)使用小记

1,490 阅读2分钟

一、简介:

yearweek(date,mode)函数是用于获取日期为date的这一天在所属年份中的周数,取值区间为0~53或1~53,而mode则指定了那一天开始算作这一年的第一周


二、参数介绍:

date:日期类型的数据

mode:备选值为0-7

  • 0:把周日当作每周的第一天,一年有54周,yearweek取值范围为0~53,并且把元旦这一天所在的这一周当作新年第一周
  • 1:把周一当作每周的第一天,一年有54周,yearweek取值范围为0~53,并且把元旦当天+3天所在的这一周当作新年第一周
  • 2:把周日当作每周的第一天,一年有53周,yearweek取值范围为1~53,并且把元旦这一天所在的这一周当作新年第一周
  • 3:把周一当作每周的第一天,一年有53周,yearweek取值范围为1~53,并且把元旦当天+3天所在的这一周当作新年第一周
  • 4:把周日当作每周的第一天,一年有54周,yearweek取值范围为0~53,并且把元旦当天+3天所在的这一周当作新年第一周
  • 5:把周一当作每周的第一天,一年有54周,yearweek取值范围为0~53,并且把元旦这一天所在的这一周当作新年第一周
  • 6:把周日当作每周的第一天,一年有53周,yearweek取值范围为1~53,并且把元旦当天+3天所在的这一周当作新年第一周
  • 7:把周一当作每周的第一天,一年有53周,yearweek取值范围为1~53,并且把元旦这一天所在的这一周当作新年第一周


看着很复杂,简单讲的话就是,mode的默认值为0,如果想把周一当作每周的第一天,将mode设置为1就行


三、使用场景:

当需要查询数据库中某个日期字段处在当前周/上一周/下一周中的所有数据,就可以采用:

YEARWEEK(date_format('日期字段', '%Y-%m-%d'),1) = YEARWEEK(now(),1)

这样的的查询条件,不过需要注意的是,等号左右两边的YEARWEEK函数需要声明相同的mode值,否则会出现查询结果对不上号的是情况