mysql 将表达式与 2 个时间戳进行比较

mysql comparing expression with 2 timestamps

我正在 xampp 上托管的 MySQL 数据库(确实是 maria DB)上测试这个命令。我想使用此命令比较 2 个时间戳:

SELECT * 
FROM SESSIONS 
WHERE START<='2019-08-07 11:00:00'<END 
OR START<'2019-08-07 12:00:00'<=END 
OR '2019-08-07 11:00:00'<=START<'2019-08-07 12:00:00' 
OR '2019-08-07 11:00:00'<END<='2019-08-07 12:00:00'

我必须使用 > < =,而不是 between

table是class次table, start col是课程开始日期时间,end col是课程结束日期时间,当运行这条命令table还是一样。

哪里出错了?

您可能需要像这样使用 BETWEEN:

SELECT * 
FROM SESSIONS 
WHERE ('2019-08-07 11:00:00' BETWEEN START AND END) 
  OR  ('2019-08-07 12:00:00' BETWEEN START AND END) 
  OR  ('2019-08-07 11:00:00' BETWEEN START AND END)
  OR  ('2019-08-07 11:00:00' BETWEEN START AND END)

您的条件

  OR '2019-08-07 11:00:00'<=START<'2019-08-07 12:00:00' 
  OR '2019-08-07 11:00:00'<END<='2019-08-07 12:00:00'

无效
尝试使用有效条件和正确格式

SELECT * 
FROM SESSIONS 
WHERE str_to_date('2019-08-07 11:00:00', '%Y-%m-%d %T')  BETWEEN START AND END  
    OR str_to_date('2019-08-07 12:00:00', '%Y-%m-%d %T')  BETWEEN START AND END  
    OR START BETWEEN str_to_date('2019-08-07 11:00:00', '%Y-%m-%d %T') 
      AND str_to_date('2019-08-07 12:00:00', '%Y-%m-%d %T')
    OR END BETWEEN str_to_date('2019-08-07 11:00:00', '%Y-%m-%d %T') 
      AND str_to_date('2019-08-07 12:00:00', '%Y-%m-%d %T')

答案已更新以使用 e =>x<= 在这种情况下,您应该使用适当的 AND 条件将条件分组使用 () 例如:

所以OR '2019-08-07 11:00:00'<=START<'2019-08-07 12:00:00'变成了

OR ( '2019-08-07 11:00:00'<=START  AND  START <'2019-08-07 12:00:00' )

OR '2019-08-07 11:00:00'<END<='2019-08-07 12:00:00'变成了

OR ( '2019-08-07 11:00:00'<END  AND END  <='2019-08-07 12:00:00' )  

问题是 MySQL 不接受这种类型的表达式:y<x<z

正确的方法是(y<x)AND(x<z)