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

來源:互聯網
上載者:User

標籤:

  在很多時候,我們負責的項目中,在資料訪問層(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,然後條件查詢的時候就查詢不出來任何東西。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.