hql日期和字符串的比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hql日期和字符串的比较相关的知识,希望对你有一定的参考价值。
public Integer getCountByNet(String netAddress,String beginTime,String endTime)
Object args[]=netAddress,beginTime,endTime;
String hql="from AppointmentRecord rec where rec.netAddress=? and rec.appDate>=? and and rec.appDate<=?";
return getHibernateTemplate().find(hql,args).size();
我的这个方法中,不知道为什么加入and rec.appDate>=? and and rec.appDate<=?这段的时候,查询就报错,什么都不返回!
我的rec.appDate在数据库中是日期类型,望高手指点!!
这里判断的是日期类型的话String beginTime,String endTime显然是不对的,sql不会默认将字符串转换过来。
to_char(rec.appDate, ‘yyyy-mm-dd’)>=?
这样就好了,最好上网查查SQL转换日期格式,或者日期比较的例子看看。 参考技术A hql = hql + " and u.ftmakedate >= '"+ sftmakedate +"' ";
我是这样写的。很正常。 参考技术B 1.看你的数据库中用的是什么类型的.
2.看你的mapping映射的什么类型
3.用同类型进行比较.
VARCHAR2 类型比较也是ascii码比较的.betwwen没有比过varchar2.但应该也是ascii码比较的.应该可以实现
p.s.如果时间类型设计成了varchar或者varchar2的.建议修改.
理由:虽然可以穿8条秋裤过冬,但是最好不要那样做.
没有时间戳的 HQL 中的日期比较
【中文标题】没有时间戳的 HQL 中的日期比较【英文标题】:Date Compare in HQL without timestamp 【发布时间】:2014-10-30 01:46:57 【问题描述】:我必须在 hibernate hql 查询中比较两个日期。 我在我的 java bean 中使用 java.util.Date 并在 mysql 数据库中使用时间戳作为数据类型。
select t from Task t where t.modifiedDate > t.endDate;
以上查询将时间与日期进行比较。我应该怎么做才能在没有时间的情况下比较上述查询中的日期。
【问题讨论】:
【参考方案1】:date()
函数的建议解决方案似乎不是纯 SQL,对我不起作用(使用 SQL Server)。最初的解决方案(分别比较日、月和年)是朝着正确方向迈出的一步,但不能以这种方式完成,例如,对于未来的日期,如果月更大,等等。但是,以下 SQL 应该可以工作:
( year(t.endDate) > year(t.startDate) )
or
( year(t.endDate) = year(t.startDate)
and
month(t.endDate) > month(t.startDate) )
or
( year(t.endDate) = year(t.startDate)
and
month(t.endDate) = month(t.startDate)
and
day(t.endDate) > day(t.startDate) )
【讨论】:
【参考方案2】:查看 Hibernate 文档了解可用的日期函数
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html
在第 14.10 节中注意这一行
second(...), minute(...), hour(...), day(...), month(...), and year(...)
所以这应该可以工作
... where year(t.endDate) > year(t.startDate)
and month(t.endDate) > month(t.startDate)
and day(t.endDate) > day(t.startDate)
报告为满足问题的解决方案是
... where DATE(t.endDate) > (t.startDate)
【讨论】:
这给了我分别与月份和年份的比较......但我必须像 06-09-2014 这样的时间比较完整日期 b> 它适用于以下更改 where DATE(t.endDate) > (t.startDate) 很高兴它对你有用。我正在使用您的解决方案编辑答案,而不是将解决方案留在 cmets 中。这就是 *** 的做事方式。 如果我们需要将日期作为名称参数而不是 t.startDate,那么查询将类似于 Date(t.endDate) @carbontax 是否允许在 hql 查询中使用“where DATE(t.endDate) > DATE(:currentDate)”。即使用带输入参数的 DATE()??以上是关于hql日期和字符串的比较的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server,HQL:如何将 SQL Server 日期时间列字段与日期进行比较