Hibernate中HQL的日期差值計算,可計算相差多少秒


  最近有個業務需求就是計算訂單創建時間離現在超過 4 小時的訂單都查找出來! 那么就需要用到日期函數了。 網上找了一下總共的日期函數有一下幾個:

CURRENT_DATE() 返回數據庫當前日期 時間函數 JPAQL HQL CURRENT_DATE() 返回數據庫當前日期
CURRENT_TIME() 時間 時間函數 JPAQL HQL CURRENT_TIME() 返回數據庫當前時間
SECOND(d) 從日期中提取具體秒 時間函數 HQL SECOND(時間字段) 空的時候返回null
MINUTE(d) 從日期中提取具體分 時間函數 HQL MINUTE(時間字段) 空的時候返回null
HOUR(d) 從日期中提取具體小時 時間函數 HQL HOUR(時間字段 空的時候返回null
DAY(d) 從日期中提取具體天 時間函數 HQL DAY(時間字段) 空的時候返回null
MONTH(d) 從日期中提取具體月 時間函數 HQL MONTH(時間字段) 空的時候返回null
YEAR(d) 從日期中提取具體年 時間函數 HQL YEAR(時間字段) 空的時候返回null

  顯然這個不能滿足需求,CURRENT_DATE 最后得出來的結果是:2015-07-18    而CURRENT_TIME()得出來的結果是:14:40:58,不算是一個日期類型,然后我百度了一下找到了這個函數  CURRENT_TIMESTAMP(),確定是可以使用的。返回的是:2015-07-18 14:40:58, OK。滿足了現在的需求。接下來就是計算兩個日期類型的差值的問題:

  問題來了:CURRENT_TIMESTAMP() - createTime,當CURRENT_TIMESTAMP()為2015-07-18 14:42:55,createTime為:2015-07-15 10:30:21,返回的結果居然是:3041234,無法相信自己的眼睛。其實這個值也是有規律可循的, 每2位數表示一個 年 月 日 時 分 秒。

  那么,34 :表示相差34秒

              12:表示相差12分

              04:表示相差4小時

以此類推。

當然也回存在以下的數值:2961512。這個怎么理解呢? 首先,12秒,15分很好理解,跑出來一個 96?莫非是96小時?   當然答案是錯誤的,因為當結算小時差時,被減數的值小於減數,那么就必須借位,即算法為:  24-(100-96) = 20,相差20小時,同理分鍾位如果是 81,那么相差分鍾數為:60-(100-81)=41分,以此類推。

 

基本的算法懂了,那么問題就好解決了,相差4小時,那么只需要滿足  (CURRENT_TIMESTAMP() - createTime)>40000即可,4分鍾只需要滿足 (CURRENT_TIMESTAMP() - createTime)>400即可,其它以此類推!

 

我找不到更好的計算兩個日期類型的差值的方法,只能用這個笨方法了,不知道網友們可有其它好的解決辦法供參考參考! 我相信這個需求其實還是非常大的。這個問題的緣由也是因為項目不能用原生的SQL導致的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM