【问题标题】:Query on LocalDateTime查询 LocalDateTime
【发布时间】:2013-01-23 08:06:28
【问题描述】:

我在 MySQL 中有一个包含 DateTime 数据类型记录的表(例如 2013-01-17 21:16:06), 在我的实体上,我为日期字段选择 LocalDateTime 数据类型。在我的查询中,我想只检索基于 2 个日期的所有记录(使用日期选择器的 fromDate 和 toDate)。假设我为 fromDate 和 toDate 选择了相同的日期,问题是两个值都是相同的,因为时间是 00:00:00,因此从数据库中没有给出任何结果。

我很好奇我是否使用了来自 Joda 的正确数据类型。我是否需要调整这两个值的时间,比如 fromDate 00:00:00 和 toDate 23:59:59 ?或者有什么更好的方法?

【问题讨论】:

  • 选择日期 >= fromDate 00:00 和日期
  • 这意味着我需要构造一个新的 LocalDateTime,它恰好在 toDate 之后的一天。是这样吗?
  • 是的。或者更好的是,您可以告诉 MySQL 在指定日期上增加一天(使用 DATE_ADD 函数或只是 /*SELECT*/ '2013-01-17' + INTERVAL 1 DAY)。
  • 搞定了。例如。 2013-01-17T00:00:00.000 - 2013-01-18T00:00:00.000。这是否意味着 toDate 记录是在与 fromDate 相同的日期插入的?或者记录属于第二天?您可以发表您的评论作为答案,我会接受它:)

标签: java mysql hibernate datetime jodatime


【解决方案1】:

给定一个日期时间列和两个任意日期作为输入,您可以这样写:

SELECT * FROM `table`
WHERE `datetime` >= @startDate
AND   `dateTime` <  @endDate + INTERVAL 1 DAY

地点:

  • startDate 为开始日期,含开始日期
  • endDate 是结束日期,不包括

上面的意思最好通过以下案例来解释:

  1. 要查看2013-01-17(一天)的所有记录,startDate 应为2013-01-17,endDate 应为2013-01-17
  2. 要查看2013-01-17 - 2013-01-18(两天)的所有记录,startDate 应为 2013-01-17,endDate 应为 2013-01-18

这使得选择日期变得直观。 &lt; 符号确保计算的结束日期从结果中排除(例如,在第一种情况下,查询省略了 `2013-01-18 00:00:00 记录)。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2015-03-01
    • 2020-06-04
    • 2023-01-31
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多