Hibernate中HQL函數匯總及獲取當前時間進行比較舉例


  在很多時候,我們負責的項目中,在數據訪問層(DAO層)通常我們會使用sql語句或者hql語句,而在我們使用hql語句拼接時有時會報錯,通常的原因是:我們使用了標准的sql語句,開啟的確是hibernate的面向對象的語句 sessionFactory.getCurrentSession().createQuery(sql);

我們應改成 sessionFactory.getCurrentSession().createSQL(sql);就可以了。

  但有時項目要求必須要使用hql,比如說將相應的接口都封裝成了jar包,本人就遇到了這樣的情況,在用hql語句比較當前時間時,一開始使用sql語句進行拼接,結果一直報錯。在這里給大家展示一下Hql常用的函數吧:

  

 函數名稱 說明 類型 支持 使用方法 備注
ABS(n) 取絕對值 數學函數 JPAQL HQL ABS(column_name[數字類型對象屬性])  
SQRT(n) 取平方根 數學函數 JPAQL HQL SQRT(column_name[數字類型對象屬性])  
MOD(x,y) 取余數 數學函數 JPAQL HQL MOD([對象屬性(數字)或值],[對象屬性(數字)或值]) 數字必須是整型,返回參數1/參數2得的余數
SIZE(c) 方法集合內對象數量 集合函數 JPAQL HQL    
MINELEMENT(c) 返回集合中最小元素 集合函數 HQL    
MAXELEMENT(c) 返回集合中最大元素 集合函數 HQL    
MININDEX(c) 返回索引集合最小索引 集合函數 HQL    
MAXINDEX(c) 返回索引集合最大索引 集合函數 HQL    
MAX(n) 返回最大值 集合函數 JPQHQL HQL    
MIN(n) 返回最小值 集合函數 JPQHQL HQL    
COUNT(n) 返回計數 集合函數 JPQHQL HQL    
CONCAT(s1,s2) 連接連個字符串 字符串函數 JPQHQL HQL CONCAT([對象屬性],[對象屬性])  
SUBSTRING(s,offset,length) 返回子串 字符串函數 JPQHQL HQL SUBSTRING([要截取的字符串屬性字段],開始位置,截取長度)  
TRIM([[BOTH/LEADING/TRAILING]] char FROM s) 默認去掉字符串兩面的空格 字符串函數 JPQHQL HQL TRIM([字符串對象屬性列]) 將字段兩端的空格去掉
LOWER(s) 小寫 字符串函數 JPQHQL HQL LOWER([字符串對象屬性列]) 將該列結果含有的字母全部大寫
UPPER(s) 大寫 字符串函數 JPQHQL HQL UPPER([字符串對象屬性列]) 將該列結果含有的字母全部大寫 
LENGTH(s) 返回字符串長度 字符串函數 JPQHQL HQL LENGTH(字段名) 返回字段內容的長度,包括數字。null值返回null.
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

eg:數據庫某個時間與當前時間進行比較

 1. String hql = "FROM " + User.class.getName() + " WHERE (TO_DAYS(registerDate) >= TO_DAYS(current_timestamp()) AND TO_DAYS(registerDate) <  TO_DAYS(current_timestamp()) + 1)   ";

 2.   String hql = "FROM " + User.class.getName() + " WHERE UNIX_TIMESTAMP(insertTime) > UNIX_TIMESTAMP(current_timestamp()) - 24 * 60 * 60 ";

注意:hql語句與sql語句都不推薦使用current_date() - 1或者currentdate()+1這種寫法,通常情況下是沒有問題,但遇到特殊情況就會產生異常。例如當前日期為11月1號,則current_date() - 1會生成日期1970-01-01,然后條件查詢的時候就查詢不出來任何東西。


免責聲明!

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



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