以周日或者周一为第一天进行数据查看(时间戳)

  记录一下这周意外遇到的坑,就是本来开发周五修改bug,结果周五快下班没有修改好,然后周五回家去修改,结果还是没有修改,周六看了一眼,我发现这还有问题,让他修改了一下,周六我就懒得看,结果周日看,发现没有数据了,明明周一到周五都有啊,接口也没有报错,我就怀疑是不是他sql写的有问题,把周日算成下一周的开始,他排查了一段时间,结果还真是,今天就百度一下,发现mysql默认给一周开始算为周日。
糕糕太可爱了
接下记录一下使用发方法
首先时间字段存储的是时间戳,以毫秒为单位,需要使用from_unixtime函数,将字段除以1000,然后进行格式化from_unixtime(timefirst/1000,’%Y-%m-%d’),然后再使用yearweek函数,里面有两个参数一个是date,一个是mode,mode可以用0-7,0-7分别代表了以周一还是周日作为第一天和每年的第一天是怎么算的还有一年有多少周,date就是日期
mode:备选值为0-7

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

用法
/这个是查看本周的数据,以周日为第一天/
SELECT * FROM a WHERE YEARWEEK(FROM_UNIXTIME(a.timefirst/1000,’%Y-%m-%d’)) = YEARWEEK(now());
/这个是查看本周的数据,以周一为第一天/
SELECT * FROM cybersky.alertraw a WHERE YEARWEEK(FROM_UNIXTIME(a.timefirst/1000,’%Y-%m-%d’),1) = YEARWEEK(now(),1);

还有非时间戳,
这个是以周一为第一天
SELECT * FROM task WHERE YEARWEEK(date_format(时间字段,’%Y-%m-%d’),1) = YEARWEEK(now(),1);
以周日为第一天
SELECT * FROM task WHERE YEARWEEK(date_format(时间字段,’%Y-%m-%d’)) = YEARWEEK(now())
;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值