MySQL:开始日期和结束日期之间的正确日期范围为两个字段

时间:2014-02-18 14:39:12

标签: mysql between date-range

我有下表名为season

+----+--------+------------+------------+
| id | cost   | start      | end        |
+----+--------+------------+------------+
| 33 |    255 | 2014-01-05 | 2014-04-16 |
| 17 |    357 | 2014-04-17 | 2014-04-19 |
| 65 | 191.25 | 2014-04-20 | 2014-07-10 |
| 49 |    255 | 2014-07-11 | 2014-08-23 |
| 81 | 191.25 | 2014-08-24 | 2014-12-18 |
+----+--------+------------+------------+

我正在尝试使用以下查询获取开始和结束之间的日期范围。

SELECT 
    *
FROM
    seasons
WHERE
    (start BETWEEN '2014-01-05' AND '2014-01-05' OR end BETWEEN '2014-01-05' AND '2014-01-05');

如果开始日期与字段上的值完全相同,我就可以获得结果集。

+----+------+------------+------------+
| id | cost | start      | end        |
+----+------+------------+------------+
| 33 |  255 | 2014-01-05 | 2014-04-16 |
+----+------+------------+------------+

现在问题是我将日期提前到

  

2014年1月6日

SELECT 
    *
FROM
    seasons
WHERE
    (start BETWEEN '2014-01-06' AND '2014-01-06' OR end BETWEEN '2014-01-06' AND '2014-01-06');
  

空集(0.00秒)

没有结果。如何在SQL上的不同字段之间获取日期范围?

感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

你的逻辑落后了。如果您想要在该季节中给定日期的季节,那么您的where子句应如下所示:

WHERE '2014-01-06' BETWEEN start AND end;

答案 1 :(得分:2)

由于您实际上并不是在寻找范围而只需要特定日期,因此您也可以使用(SQL Fiddle):

SELECT *
FROM seasons
WHERE start = '2014-01-05' OR end = '2014-01-05'

答案 2 :(得分:1)

查询某个日期是否在给定范围内时,WHERE子句通常为:

WHERE 'specified_date' BETWEEN 'start_date' AND 'end_date'

否则它对MySQL来说是一个不合逻辑的日期范围,并将返回一个空的结果集。

BETWEEN比较运算符等同于:

  

min< = expr AND expr< = max

因此,它意味着像这样使用:

  

expr BETWEEN min AND max

以下是BETWEEN Comparison Operator上的MySQL文档。