我有下表名为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上的不同字段之间获取日期范围?
感谢任何帮助。
答案 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文档。