比较Mysql之间的多个日期

比较Mysql之间的多个日期,mysql,Mysql,我有这个疑问 SELECT * FROM `reservations` WHERE '2014-09-04' BETWEEN check_in AND check_out 在另一种情况下,我需要将此签入和签出字段与多个日期进行比较。这个查询可以解决这个问题 SELECT * FROM `reservations` WHERE '2014-09-04' BETWEEN check_in AND check_out OR '2014-09-09' BETWE

我有这个疑问

SELECT * 
FROM   `reservations` 
WHERE  '2014-09-04' BETWEEN check_in AND check_out 
在另一种情况下,我需要将此签入和签出字段与多个日期进行比较。这个查询可以解决这个问题

SELECT * 
FROM   `reservations` 
WHERE  '2014-09-04' BETWEEN check_in AND check_out 
        OR '2014-09-09' BETWEEN check_in AND check_out 

但是如果我有很多数据要比较,那么这个查询就没有效率。有人有办法缩短此查询吗?

如果您在
签入
签出
上没有索引,那么使用
的多个条件是最好的方法。如果这些列上确实有索引,并且在第一种情况下使用它们,那么请尝试使用
union

SELECT * 
FROM `reservations` 
WHERE '2014-09-04' BETWEEN check_in AND check_out 
UNION
SELECT * 
FROM   `reservations` 
WHERE  '2014-09-09' BETWEEN check_in AND check_out ;

请注意,
union
会产生删除重复项的开销。我之所以使用它,是因为您可能会在结果中有重复项,而且您可能不想要它们。一般来说,我建议尽可能使用
union all

如果在
签入
签出
上没有索引,那么使用
的多个条件是最好的方法。如果这些列上确实有索引,并且在第一种情况下使用它们,那么请尝试使用
union

SELECT * 
FROM `reservations` 
WHERE '2014-09-04' BETWEEN check_in AND check_out 
UNION
SELECT * 
FROM   `reservations` 
WHERE  '2014-09-09' BETWEEN check_in AND check_out ;

请注意,
union
会产生删除重复项的开销。我之所以使用它,是因为您可能会在结果中有重复项,而且您可能不想要它们。一般来说,我建议尽可能使用
union all

如果在
签入
签出
上没有索引,那么使用
的多个条件是最好的方法。如果这些列上确实有索引,并且在第一种情况下使用它们,那么请尝试使用
union

SELECT * 
FROM `reservations` 
WHERE '2014-09-04' BETWEEN check_in AND check_out 
UNION
SELECT * 
FROM   `reservations` 
WHERE  '2014-09-09' BETWEEN check_in AND check_out ;

请注意,
union
会产生删除重复项的开销。我之所以使用它,是因为您可能会在结果中有重复项,而且您可能不想要它们。一般来说,我建议尽可能使用
union all

如果在
签入
签出
上没有索引,那么使用
的多个条件是最好的方法。如果这些列上确实有索引,并且在第一种情况下使用它们,那么请尝试使用
union

SELECT * 
FROM `reservations` 
WHERE '2014-09-04' BETWEEN check_in AND check_out 
UNION
SELECT * 
FROM   `reservations` 
WHERE  '2014-09-09' BETWEEN check_in AND check_out ;
请注意,
union
会产生删除重复项的开销。我之所以使用它,是因为您可能会在结果中有重复项,而且您可能不想要它们。一般来说,我建议尽可能使用
union all

简短的查询:

SELECT DISTINCT r.* 
 FROM reservations r
 JOIN (
  SELECT '2014-09-04' AS dt UNION
  SELECT '2014-09-09' AS dt
 ) dates ON dates.dt BETWEEN r.check_in AND r.check_out
简短查询:

SELECT DISTINCT r.* 
 FROM reservations r
 JOIN (
  SELECT '2014-09-04' AS dt UNION
  SELECT '2014-09-09' AS dt
 ) dates ON dates.dt BETWEEN r.check_in AND r.check_out
简短查询:

SELECT DISTINCT r.* 
 FROM reservations r
 JOIN (
  SELECT '2014-09-04' AS dt UNION
  SELECT '2014-09-09' AS dt
 ) dates ON dates.dt BETWEEN r.check_in AND r.check_out
简短查询:

SELECT DISTINCT r.* 
 FROM reservations r
 JOIN (
  SELECT '2014-09-04' AS dt UNION
  SELECT '2014-09-09' AS dt
 ) dates ON dates.dt BETWEEN r.check_in AND r.check_out

如果需要检查重叠:

SELECT *
FROM reservations
WHERE '2014-09-04' <= check_out AND '2014-09-09' >= check_in
选择*
保留地
其中“2014-09-04”=入住

如果需要检查重叠:

SELECT *
FROM reservations
WHERE '2014-09-04' <= check_out AND '2014-09-09' >= check_in
选择*
保留地
其中“2014-09-04”=入住

如果需要检查重叠:

SELECT *
FROM reservations
WHERE '2014-09-04' <= check_out AND '2014-09-09' >= check_in
选择*
保留地
其中“2014-09-04”=入住

如果需要检查重叠:

SELECT *
FROM reservations
WHERE '2014-09-04' <= check_out AND '2014-09-09' >= check_in
选择*
保留地
其中“2014-09-04”=入住

谢谢解释谢谢解释谢谢解释谢谢解释谢谢解决方案谢谢解决方案谢谢解决方案