mysql查询最近一个自然周_mysql动态查询上周的数据

between and 边界值问题

工作中你是否遇到过这样的场景:每周周一导出上周的收入报表,支出报表,或者某个业务的数量。

当查询条件中包含时间段时,自然就想到了使用between ... and ...,那么between ... and ... 的查询是否包括两端的边界值呢?

首先可以给出肯定的答案:between ... and ... 是包括边界值的!

不论是用在数值上(between 300 and 500),或是时间上(between '2018-02-19' and '2018-02-26')

mysql的手册中描述如下

expr BETWEEN min AND max

expr大于或等于 min 且expr 小于或等于max,

上述关系相当于表达式 (min <= expr AND expr <= max)

用于时间需注意

首先介绍两个用在mysql中用于计算日期的函数:

DATE_ADD(date,INTERVAL expr type)  –加法 ,取得的是date之后的日期

DATE_SUB(date,INTERVAL expr type)  –减法,取得的是date之前的日期

例如我们想要查询上周(20180219-20180225)的数据,当前时间是20180226,我们使用BETWEEN date_sub(curdate(),interval 7 day) AND curdate() ,

这种写法中curdate()显示2018-02-26,其实是2018-02-26 00:00:00,如果在2018-02-26 00:00:00恰好有一条数据,也是会被查出来的。

所以如果要在周一时查出上周周一到周日的数据,使用>= date_sub(curdate(),interval 7 day) and < curdate(),或者使用mysql的YEARWEEK函数,

例如:YEARWEEK(date_format(queryTime,'%Y-%m-%d')) = YEARWEEK(now())-1 (查询上周)

date_format的使用

curdate()只写到日期,例如'2018-02-26',没有后面的时分秒,如果使用DATE_FORMAT()函数将其格式化(DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s')),可以发现时分秒默认都是00:00:00,

上面DATE_FORMAT()中的参数解读:

%Y:年,4位

%m:月,数值(00-12)

%d:月的天,数值(00-31)

%H:小时 (00-23)

%i:分钟,数值(00-59)

%s:秒(00-59)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值