时间查询是非常普遍的查询方式。但是由于时间本身有多种表现形式,再加上各类数据库对时间的支持和实现有差异,所以在hql中的查询方式也有差异。以下是一些总结:
一、oracle下查询date类型数据:
在oracle下,date类型也支持日期时间类型,也就是说虽然类型是date型,但实际是可能存储datetime型的。
由于通过sql查询需要先对date型进行to_char()转换(也可以对变量用to_date(),但我在10g下没有成功,待了解),以所在hql中也要这样:
- if(beginTime!=null && !"".equals(beginTime)){
- hql.append(" and to_char(event.happenTime,'yyyy-mm-dd hh24:mi:ss')>='"+beginTime+":00'");
- }
- if(endTime!=null && !"".equals(endTime)){
- hql.append(" and to_char(event.happenTime,'yyyy-mm-dd hh24:mi:ss')<='"+endTime+":00'");
- }
这里记住一定要指定时间模式,另外,oracle中日期中的月和日显示是去前0的(2009-04-05 显示为2009-4-5)实际不是,所以设置模式不能只看表面。