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差不多
参数是合法的日期或日期/时间表达式。
注释

  1. 只有值的日期部分参与计算。
  2. 当日期date1<date2时函数返回值为正数,date1=date2时函数返回值为0,date1>date2 时函数返回值为负数。
  3. 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


Alei_杨磊
19 声望2 粉丝

没得啥, 慢慢学吧