使用 SQL 将 Date Java 与数据库表中的 DateTime 列进行比较

发布于 2024-12-17 17:11:52 字数 384 浏览 0 评论 0原文

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

  WHERE event_date >= :startDate and event_date < :finishDate

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

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

您建议我做什么?

I've got two Date Java objects which will be assigned to some variables in sql query (because I use Hibernate) in order to compare them with a DateTime type column to get rows with a specified time range, for example:

  WHERE event_date >= :startDate and event_date < :finishDate

I couldn't compare date to datetime directly so I thought of 2 possible solutions:

  • Try to convert event_date field using a query to date field before the comparison.
  • Or try to convert date java object to dateTime which I think might not be possible..

What would you suggest me to do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忘羡 2024-12-24 17:11:52

我想您遇到问题是因为您使用了 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);

 
ps:请务必使用 java.util.Date 对象,而不是 java.sql.Date 对象。

I guess you have the problems because you use setDate (correct me if I'm wrong) and setDate method:

Binds the date (time is truncated) of a given Date object to a named query parameter.

Use setTimestamp instead, which binds the date and time of a given Date object:

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.: be sure to use java.util.Date object and NOT the java.sql.Date one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文