【问题标题】:Compare Date Java to DateTime Column in database table using SQL使用 SQL 将 Date Java 与数据库表中的 DateTime 列进行比较
【发布时间】:2012-01-04 13:09:03
【问题描述】:

我有两个 Date Java 对象,它们将被分配给 sql 查询中的一些变量(因为我使用 Hibernate),以便将它们与 DateTime 类型列进行比较以获取具有指定时间范围的行,例如:

  WHERE event_date >= :startDate and event_date < :finishDate

我无法直接将日期与日期时间进行比较,因此我想到了 2 种可能的解决方案:

  • 尝试在比较之前使用查询将 event_date 字段转换为日期字段。
  • 或者尝试将 date java 对象转换为 dateTime,我认为这可能是不可能的..

你会建议我做什么?

【问题讨论】:

  • “或者尝试将日期 java 对象转换为我认为不可能的 dateTime” - 查看 java.sql.Date

标签: java sql hibernate datetime date


【解决方案1】:

我猜你有问题是因为你使用了setDate(如果我错了,请纠正我)和setDate方法:

将给定Date 对象的日期(时间被截断)绑定到命名查询参数。

改用setTimestamp,它绑定给定Date对象的日期和时间

java.util.Date startDate = … ;
java.util.Date finishDate = … ;
Query query = session.createQuery("from YourTable where event_date >= :startDate and event_date < :finishDate");
query.setTimestamp("startDate", startDate);
query.setTimestamp("finishDate", finishDate);

 
p.s.:一定要使用java.util.Date 对象和NOT java.sql.Date 一个。

【讨论】:

  • 感谢您的回复,您使用 setDate 对我的看法是正确的。这个方法我试过了,但是返回的结果好像还是没有被过滤掉。
  • 是的,我确实使用 java.util.Date。这是一个如何使用当前时间创建最终日期的示例: if(fDate != null){ // 调整最终日期 Calendar c = Calendar.getInstance(); c.setTime(fDate); c.add(Calendar.DAY_OF_YEAR, 1);日期 fDate2 = c.getTime(); q.setDate("fdate", fDate2); }
  • @Best Weird... 这应该可以正常工作。您能否启用生成的 SQL 查询的日志记录(有关详细信息,请参阅 stackoverflow.com/a/2333173/648313)以查看那里发生了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 2018-09-16
相关资源
最近更新 更多