1. 程式人生 > >MySQL計算時間差函數

MySQL計算時間差函數

格式 測試 select HERE 日期格式 med http ear lan

  今天遇到一個需要以時間差為條件的查詢場景,需要查詢出用戶在某天通話時間大於15秒的記錄,由於對sql了解的並不多,一開始嘗試直接用時間計算,發現果然行不通,然後Google了一些資料,發現各個數據庫都有針對時間計算的函數,在這裏總結一下MySQL的,其他數據庫的有輕微的差異,不過也都是大同小異,也可以借鑒

TIMESTAMPDIFF(時間單位,參數1,參數2)

  可以設置參數,可以精確到天(DAY),小時(HOUR),分鐘(MINUTE),秒(SECOND),毫秒(FRAC_SECOND(低版本不支持,可以用秒,再乘1000)),計算機制為參數2-參數1,最後結果為數字,單位為第一個參數設置的值

  (week 周,month 月,quarter 季度,year 年 )這幾個單位沒有經過測試,但是應該也是支持的

  --相差1天
  select TIMESTAMPDIFF(DAY, ‘2018-03-20 23:59:00‘, ‘2015-03-22 00:00:00‘);
  --相差49小時
  select TIMESTAMPDIFF(HOUR, ‘2018-03-20 09:00:00‘, ‘2018-03-22 10:00:00‘);
  --相差2940分鐘
  select TIMESTAMPDIFF(MINUTE, ‘2018-03-20 09:00:00‘, ‘2018-03-22 10:00:00‘);

  --相差176400秒

  select TIMESTAMPDIFF(SECOND, ‘2018-03-20 09:00:00‘, ‘2018-03-22 10:00:00‘);

  --相差大於等於15秒

  SELECT * FROM 表名 WHERE TIMESTAMPDIFF(SECOND,start_time(較小的時間),stop_time(較大的時間)) >= 15

 

DATEDIFF(參數1,參數2)

  返回值為相差的天數,int類型,不能定位到時分秒,因為固定天數為單位,所以比上面的少一個可設置的參數,且計算機制為參數1-參數2,與上面的計算機制相反,如果搞錯了會計算出負數,mysql也算是給埋了個坑

   -- 相差2天
   select datediff(‘2018-03-22 09:00:00‘, ‘2018-03-20 07:00:00‘);

TIMDIFF(參數1,參數2)

  返回值為兩個之間相差的差值,類型與參數1和參數2的類型相同,不適宜用於計算,可用來當做結果,計算機制為參數1-參數2

 

   SELECT TIMEDIFF(‘2018-05-21 14:51:43‘,‘2018-05-19 12:54:43‘);   

   結果為:49:57:00

其他日期函數

  • now()函數返回的是當前時間的年月日時分秒
  • curdate()函數返回的是年月日信息
  • curtime()函數返回的是當前時間的時分秒信息
  • 對一個包含年月日時分秒日期格式化成年月日日期,可以使用DATE(time)函數

  • 註:now()與sysdate()類似,只不過now()在執行開始時就獲取,而sysdate()可以在函數執行時動態獲取。

  本文參考博客

https://www.cnblogs.com/hider/p/9067010.html

  

MySQL計算時間差函數