2014-02-18 1 views
3

я следующая таблица называется сезонамиMySQL: Правильный диапазон дат между началом и окончанием в виде двух полеев

+----+--------+------------+------------+ 
| 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-01-06

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

Это также обсуждались здесь. http://stackoverflow.com/questions/3822648/mysql-query-between-two-dates –

ответ

5

У вас есть своя логика назад. Если вы хотите сезонов, где данная дата в этом сезоне, то ваш, где положение должно выглядеть следующим образом:

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

Нет sh * t. Это сработало! Можете ли вы вкратце объяснить, почему это происходит назад? Спасибо –

+0

@LouieMiranda Конечно. Ваша оригинальная логика проверяла сезоны с начальными днями или конечными днями между «2014-01-06» и «2014-01-06». Это то же самое, что и 'WHERE start = '2014-01-06' OR end = '2014-01-06''. То, что вы действительно хотели, было в любой сезон, когда дата была внутри этих сезонов начала и окончания дат. – Jim

+0

Спасибо, что объяснил Джим. –

1

При выполнении запроса, если определенная дата в заданном диапазоне, положение WHERE обычно является:

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

В противном случае это нелогичный интервал дат для MySQL и возвращает пустой набор результатов.

BETWEEN Оператор сравнения эквивалентно:

мин < = выраж И EXPR < = макс

Таким образом, это означало, которые будут использоваться как это:

выражение МЕЖДУ min И max

Вот документация от MySQL на BETWEEN Comparison Operator.

2

Так как вы на самом деле не ищете диапазон и только нуждающиеся в определенную дату, вы можете просто использовать (SQL Fiddle):

SELECT * 
FROM seasons 
WHERE start = '2014-01-05' OR end = '2014-01-05' 
Смежные вопросы