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)
。
我正在 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)
。