Hibernate中HQL函数汇总及获取当前时间进⾏⽐较举例
在很多时候,我们负责的项⽬中,在数据访问层(DAO层)通常我们会使⽤sql语句或者hql语句,⽽在我们使⽤hql语句拼接时有时会报错,通常的原因是:我们使⽤了标准的sql语句,开启的确是hibernate的⾯向对象的语句 CurrentSession().createQuery(sql);
我们应改成 CurrentSession().createSQL(sql);就可以了。
但有时项⽬要求必须要使⽤hql,⽐如说将相应的接⼝都封装成了jar包,本⼈就遇到了这样的情况,在⽤hql语句⽐较当前时间时,⼀开始使⽤sql语句进⾏拼接,结果⼀直报错。在这⾥给⼤家展⽰⼀下Hql常⽤的函数吧:
函数名称说明类型⽀持使⽤⽅法备注
ABS(n)取绝对值数学函数JPAQL HQL ABS(column_name[数字类型
对象属性])
SQRT(n)取平⽅根数学函数JPAQL HQL SQRT(column_name[数字类
hibernate要学多久型对象属性])
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 " + Name() + " WHERE (TO_DAYS(registerDate) >= TO_DAYS(current_timestamp()) AND
TO_DAYS(registerDate) < TO_DAYS(current_timestamp()) + 1) ";
2. String hql = "FROM " + Name() + " 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,然后条件查询的时候就查询不出来任何东西。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论