前言
MySQL 5.7日期函数官方文档
遇到了日期边界的一些问题,这里统一记录
DATEDIFF(expr1,expr2)
expr1
和expr2
可以传'2007-12-31 23:59:59'
或2007-12-31
格式的数据,但都只读取到天的部分即2007-12-31
。- 计算规则:
expr1 - expr2
,仅仅用天作为单位运算,并返回整数,会出现负数。
DATEDIFF(expr1,expr2) 解决的需求
根据LeetCode上题目的特点
- 表中有
date
类型字段activity_date
- 不能精确到时分秒的区间,只计算天数
- 过滤条件为近x天,x > 0
近1天(表示今天)where activity_date DATEDIFF(activity_date, CURDATE()) = 0
近2天where activity_date DATEDIFF(activity_date, CURDATE()) = 1
近3天where activity_date DATEDIFF(activity_date, CURDATE()) < 3
需要取区间,所以是 <符号,更多的天数条件也需要用<
筛选截至今天近30天内的用户
WHERE datediff(CURDATE(),activity_date) < 30
等价于
where activity_date between date_add(CURDATE(), interval -29 day) and CURDATE()
# 其中
#-29 day表示29天前的日期
# CURDATE()表示当天
# 关键字计算 between and 作用在date类型时,取闭左右区间