2015-11-30 3 views
0

У меня есть 2 столбца в моей таблице с диапазонами дат, один начинается, а другой - конец. Когда я передаю значение для поиска из моей Java-программы, используя hibernate, я хочу получить все те строки, в которых значение входит в диапазон. Например: Если я передаю '2008-08-29', он должен вывести все строки в диапазоне от 2008 до 2012 года с начала и конца столбцов. Но есть еще один диапазон 2012 года, для которого начало «2012-07-01», но столбец «конец» имеет значения NULL. Что мне делать в этом случае?включают нулевые значения в сравнении даты mysql

Вот что я сделал. Но он также приносит некоторые другие строки, которые не лежат в этом диапазоне.

SELECT * FROM `building_register_period` 
WHERE (@periodDate BETWEEN start_period_date AND end_period_date OR end_period_date IS NULL) 

ответ

1

Это должно работать для вас:

WHERE start_period_Date <= @periodDate 
AND (end_period_Date >= @periodDate OR end_period_Date IS NULL); 

Я хотел бы также всегда advise against using BETWEEN with dates.

Проблема с запросом, что вы ограничиваете к одному из двух условий:

  1. @periodDate BETWEEN start_period_date AND end_period_date
  2. end_period_date IS NULL

Либо один может быть правдой, чтобы вернуть строку, так как ваш второй предикат не имеет ссылки вообще на @periodDate, тогда вы получите все строки, где end_period_date имеет значение NULL, независимо от start_period_date.

+0

Спасибо, это работает во всех случаях :) –

Смежные вопросы