|
锁定老贴子 主题:问关于hibernate里的日期比较
该帖已经被评为精华帖
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-06-30
mysql里
有一个表里有一列为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'这样的比较? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间: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
目前的做法
[code:1] 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(); [/code:1] 求更好的做法 |
|
| 返回顶楼 | |
|
最后更新时间:2004-07-06
我的做法:
[code:1] 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}); [/code:1] 数据库是SQLServer,我列出当天新闻就是这样实现的,很简单。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-07-06
你的数据库是date还是datetime的
你的date变量的时间部分需要清零不 |
|
| 返回顶楼 | |
|
最后更新时间:2004-07-16
datetime
不用 |
|
| 返回顶楼 | |
|
最后更新时间:2004-08-20
今天因为做个时间段的查询 也遇到这个问题 看了一下hibernate的src。
上面的解决其实可以如下解决 [code:1]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}); [/code:1] 因为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分钟呢? |
|
| 返回顶楼 | |







