【问题标题】:MySQL query to match dates and times placed in separate columnsMySQL查询以匹配放置在单独列中的日期和时间
【发布时间】:2012-07-27 06:05:47
【问题描述】:

我有两张桌子

---------------------- |车辆 | ---------------------- + 身份证 + |姓名 | + available_from_date + | available_from_time | + available_to_date + |可用时间 | ---------------------- ---------------------- |保留_车辆 | ---------------------- + 身份证 + |车辆编号 | + reserved_from_date + | reserved_from_time | + reserved_to_date + |保留时间 | ----------------------

我想查询车辆表,以便仅获取满足可用日期和时间且还没有为该时间预留的车辆。

例如,我想搜索从日期 2012-07-27 和时间 10:00 到日期 2012-08-15 和时间 14:00 可用的车辆。

如何一次查询解决上述问题?

提前致谢。 :)

【问题讨论】:

  • 我尝试了以下方式,但结果错误 SELECT * FROM vehicles WHERE (available_from_date = "07/31/2012" AND available_to_time >= "9:00:00")
  • 但是您甚至需要检查保留的日期,否则它们对您来说无关紧要?
  • 为什么不将 to 和 from 字段存储为 DATETIME 类型。这将使您的事情变得更容易,因为您将可以使用许多强大的日期操作和比较功能。
  • SELECT * FROM Vehicle WHERE id NOT IN(SELECT id FROM Reserved_Vehicles) A​​ND (available_from_date = "2012-08-14" AND available_to_time >= "10:00:00") 由于时间检查,此查询排除了可用车辆,因为查询中的时间是 10:00:00 而不是 09:00:00。跨度>

标签: mysql database datetime join


【解决方案1】:

听起来您可以在 WHERE 子句中使用 AND。这不工作吗?

您需要查询这两个表吗?或者您可以安全地假设,如果一辆车在给定时间被预订,则它不可用,如果它可用,则它不被预订?

【讨论】:

  • 我试过 SELECT * FROM Vehicle WHERE id NOT IN(SELECT id FROM Reserved_Vehicles) A​​ND (available_from_date = "07/31/2012" AND available_to_time >= "9:00:00") 但是当我在时间之间切换时问题出现了以上查询
  • SELECT * FROM Vehicle WHERE id NOT IN(SELECT id FROM Reserved_Vehicles) A​​ND (available_from_date = "2012-08-14" AND available_to_time >= "10:00:00") 由于时间检查,此查询排除了可用车辆,因为查询中的时间是 10:00:00 而不是 09:00:00。跨度>
  • 时间变量仅在日期等于您要测试的日期时才相关。如果它从较早的一天可用或可用于较晚的一天,则时间无关紧要。所以你需要测试 ((available_from_date = day AND available_from_time
猜你喜欢
  • 2016-10-25
  • 2013-09-04
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 2018-08-28
  • 2011-07-01
相关资源
最近更新 更多