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在数据库中是日期类型,望高手指点!!

and rec.appDate>=? and and 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 日期时间列字段与日期进行比较

hibernate hql查询 与Criteria 查询语句区别和效率

hql语句cast用法详解下

hql语句cast用法的详解?

比较 POSIXlt 对象和日期字符串是不是正确?

如何比较给定日期(字符串)是当前日期和最后 8 个日期? [关闭]