to_days(2008-10-22)干啥的
返回0到2008年10月22日的天数,那可太多天了, 可以用来统计昨天或前天的数据
例子:
统计昨天的数据
select * from tablename where to_days(now())-to_days(created_time) = 1;
统计前天的数据
select * from tablename where to_days(now())-to_days(created_time) = 2;
统计昨天的api访问记录(api_recording)中都有哪些代理商(agent)
select distinct a.name, r.agent_no from api_recording r left join agent a on a.no=r.agent_no where to_days(now())-to_days(r.created)=1
注释:左链接,左表返回全量数据
datediff(date1, date2)干啥的
返回date1和date2两个datetime之间的天数, 其实跟to_days差不多
参数是合法的日期或日期/时间表达式。
注释
- 只有值的日期部分参与计算。
- 当日期date1<date2时函数返回值为正数,date1=date2时函数返回值为0,date1>date2 时函数返回值为负数。
- Mysql的DATEDIFF只有两个参数。SQL Server有三个参数,
注意:因为对索引列使用函数会导致索引失效,如果查询时需要使用到索引,请使用MySQL DATE_SUB() 函数
查询当天的所有数据SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())=0
查询昨天的所有数据SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())=-1
查询未来第n天的所有数据
//当n为负数时,表示过去第n天的数据SELECT * FROM 表名WHERE DATEDIFF(字段,NOW())=n
查询未来n天内所有数据
//n天内SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())<n AND DATEDIFF(字段,NOW())>=0
查询过去n天内所有数据
//包含当天SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())<=0 AND DATEDIFF(字段,NOW())>-n
//不包含当天SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())<0 AND DATEDIFF(字段,NOW())>-n