【问题标题】:How to get data from date and time range in MySQL如何从 MySQL 中的日期和时间范围获取数据
【发布时间】:2014-09-11 03:42:02
【问题描述】:

MySQL 表:-

ID    |    From_DateTime      |    To_DateTime

1          2014-09-01 10:00:00    2014-09-10 22:00:00

解释:

我在数据库表中为日期和时间范围添加了 2 列。上面显示的数据表示从 01-09-2014 到 10-09-2014 是日期范围,而 10:00:00 到 22:00:00 是时间范围。

正面情景 - 现在我在查询中传递了 2014-09-05 15:00:00,该查询同时进入日期和时间范围。我需要的是查询中的 ID。

否定场景 - 现在我在查询中传递 2014-09-05 23:00:00 进入 Date 进入范围但 TIME 不在指定范围,所以我应该得到 0 结果。

我对数据库查询一无所知,因此我将其发布到此处以获得数据库专家的帮助。

【问题讨论】:

  • 将其拆分为 4 列:2 个日期和 2 个时间,因为当前架构没有多大意义。然后使用DATE() + TIME() 函数进行比较。
  • 使用这 2 列是不可能进行匹配的吗?是否必须有 4 列而不是 2 列?如果是的话,我把它分成 4 列,你能帮我建立查询吗?
  • 有可能,但意义不大。 datetime 指向确切的时间点,而您需要一个 date 和一个 time,它们彼此不相关。
  • 你能告诉我两列怎么可能吗?
  • 是的,它完成了,但如果没有找到匹配项,它会给我空值。你能指导我如何避免这种情况吗?

标签: mysql date datetime between


【解决方案1】:

这样的事情应该可以工作。可能需要一些调整。

SELECT ID FROM (
  SELECT ID FROM <tablename> 
    WHERE DATE('<dateTimeValue>') BETWEEN DATE(From_DateTime) AND DATE(To_DateTime) 
    AND TIME('<dateTimeValue>') BETWEEN TIME(From_DateTime) AND TIME(To_DateTime)
  UNION
    SELECT 0 AS ID FROM DUAL
) AS a LIMIT 1

【讨论】:

  • 如果我通过 '2014-09-05 23:00:00' 那么它也返回不正确的行,我需要同时匹配日期和时间。
  • 知道了,编辑上面。子句之间需要 2 个。
  • 这会让你慢下来。您应该采用上面的建议并创建 4 列 From_Date、To_Date、From_Time、To_Time,这样它们就可以被索引,并且您不必在被测试的每一行上运行 6 个函数
  • 最后一个查询,如果匹配没有找到它返回的 NULL。如果没有找到匹配项,我们可以拥有它不应该返回 NULL。
【解决方案2】:

date_time 中选择 ID WHERE From_DateTime '2014-09-05 15:00:00';

这里date_time 是表名... 不要忘记将日期放在单引号中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-02
    • 2019-03-29
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多