锁定老帖子 主题:问关于hibernate里的日期比较
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-06-30
有一个表里有一列为datetime类型,假定为myDate 影射到hibernate里为java.util.Date类型 我怎么获得指定日期的数据? 引起问题的是datetime和Date里都含有时间 导致 myDate = new java.util.Date() 比较不成功 最简单的做法是把数据库的datetime类型改为date类型 但是我又必须使用datetime 难道要myDate >= '2004-06-29 00:00:00' and myDate < '2004-06-30 00:00:00'这样的比较? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-06-30
HQL的where部分: where myDate>:minDate and myDate<:maxDate
setDate("minDate",minDate); setDate("maxDate",maxDate); 不可以吗?? |
|
返回顶楼 | |
发表时间:2004-06-30
我的意思就是说
不得不这么做么? |
|
返回顶楼 | |
发表时间:2004-07-01
也许吧.
你想一下,每个数据库的日期格式都是不一样的. eg: sqlserver类似字符串用两个单引号('日期字符串').access是用两个井号(#日期字符串#),oracle是用to_date(字符串,格式)函数的等. 如果是用像你那样的话,就不通用了(不能夸数据库). 我也只是推测的,有兴趣去看一下hb的源码. 如果清楚了,不妨共享一下. 谢谢了. |
|
返回顶楼 | |
发表时间:2004-07-01
目前的做法
Calendar cal = Calendar.getInstance();; cal.setTime(date);; cal.set(Calendar.HOUR_OF_DAY, 0);; cal.set(Calendar.MINUTE, 0);; cal.set(Calendar.SECOND, 0);; cal.set(Calendar.MILLISECOND, 0);; Date begin = cal.getTime();; cal.add(Calendar.DATE, 1);; Date end = cal.getTime();; Query query = sess.createQuery("from MyTable where myDate>=:begin and myDate<:end");; query.setDate("begin", begin);; query.setDate("end", end);; List list = query.list();; 求更好的做法 |
|
返回顶楼 | |
发表时间:2004-07-06
我的做法:
Date date = new Date();; List list = sess.find("from MyTable where myDate between ? and DATEADD(d,1,?);",new Object[]{date,date},new Type[]{Hibernate.DATE,Hibernate.DATE});; 数据库是SQLServer,我列出当天新闻就是这样实现的,很简单。 |
|
返回顶楼 | |
发表时间:2004-07-06
你的数据库是date还是datetime的
你的date变量的时间部分需要清零不 |
|
返回顶楼 | |
发表时间:2004-07-16
datetime
不用 |
|
返回顶楼 | |
发表时间:2004-08-20
今天因为做个时间段的查询 也遇到这个问题 看了一下hibernate的src。
上面的解决其实可以如下解决 Date date = new Date();; Calendar rightNow = Calendar.getInstance();; rightNow.setTime(date);; rightNow.set(Calendar.HOUR_OF_DAY,23);; rightNow.set(Calendar.MINUTE,59);; rightNow.set(Calendar.SECOND,59);; date = rightNow.getTime();; List list = sess.find("from MyTable where myDate between ? and ?",new Object[]{date,date},new Type[]{Hibernate.DATE,Hibernate.TIMESTAMP});; 因为Hibernate.DATE 是net.sf.hibernate.type.DateType 它返回的插入到sql中的值是'yyyy-mm-dd'因此第一个from的日期参数直接用此即可; Hibernate.TIMESTAMPnet.sf.hibernate.type.TimestampType它返回的插入到sql中的值 "yyyy-MM-dd HH:mm:ss";因此第二个from的日期参数直接用此即可才可以取到time的时间; Hibernate.TIMESTAMP 所以如果只查一天的第一步就是把要插入的to的时间设为该天的最大值。 |
|
返回顶楼 | |
发表时间:2005-09-19
我的表里有字段:userId ,beginTime,endTime ,后面两个是timestamp类型的
现在需要查出这个表中begintime + 5分钟 比 endTime小的记录集总数需要怎么写呢? 用select COUNT(DISTINCT user.id) from beans.User user WHERE ((user.beginTime+5) < user.endTime) 这里是加了5天的,这里怎么加5分钟呢? |
|
返回顶楼 | |