MySql中TO_DAYS函數和DATE_DIFF函數

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章