【问题标题】:Select time between two times mysql选择两次mysql之间的时间
【发布时间】:2014-02-26 21:27:42
【问题描述】:

我必须检查特定时间是否介于两次(开市和闭市时间)之间。

打开和关闭时间在数据库中保存为与工作日 ID 相关的“开始”和“结束”时间,而不是与日期相关的时间。

所以我的问题是,我有两种不同的情况,第一种情况是结束时间大于开始时间,例如 end=19:00:00 和 start=09:00:00

但也可以是 end=06:00:00 和 start=20:00:00

那么检查时间是否在两个时间之间的性能方法是什么?

我的 sql 是这样的:

SELECT * 
      FROM opening
      WHERE weekday_id = :weekday
      AND start <=  :time
      AND end >=  :time 

【问题讨论】:

  • WHERE 在哪里? :) 尝试 SELECT * FROM opening WHERE weekday_id = :weekday AND (start = :time) OR (start >= :time AND end
  • 对不起,我把原来的sql语句改到最小了,为什么会出现这个错误
  • 什么是开始和结束文件类型?
  • 那么,问题是,有没有可能比WHERE (start &lt; end AND (:time &lt; end AND :time &gt;= start)) OR (start &gt; end AND (:time &gt;= start OR :time &lt; end))写得更有效率?

标签: mysql sql


【解决方案1】:

在性能方面没有很好的方法来处理这个问题。正确的where 语句是:

where (start <= end and :time between start and end) or
      (end < start and :time not between end and start)

当然,你不必使用between,你可以把这个扩展出来:

where (start <= end and :time >= start and :time <= end) or
      (end < start and (:time <= end or :time >= start))

【讨论】:

  • 优秀的答案。真的在同一个问题上苦苦挣扎。
【解决方案2】:

如果时间在同一天,而你不知道哪个是开始,哪个是结束(看起来很奇怪),那么:

SELECT * 
FROM opening
WHERE weekday_id = :weekday
  AND (:time BETWEEN start AND end OR :time BETWEEN end AND start)

如果时间包括日期(日期时间)并且您知道哪个是哪个,那么您只需要一个。

【讨论】:

    猜你喜欢
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    相关资源
    最近更新 更多