Как найти определенный год в диапазоне от 1000 * - PullRequest
0 голосов
/ 09 февраля 2020

Я прохожу через год, например, 2010

У меня в таблице два столбца: yearFrom и YearTo

yearFrom            yearTo
2009                2010        *hit
2005                            *miss
2010                2015        *hit
2015                2018        *miss
2010                            *hit

Где выбран выбранный ряд, и пропустить это не так.

Иногда в столбце будет значение yearTo, где его нет, и оно будет нулевым.

Как сформулировать предложение where для выполнения sh это.

Я пытался

and yearFrom >= @year and yearTo <= @year 

, но он не возвращает то, что мне нужно.

Ответы [ 4 ]

1 голос
/ 09 февраля 2020

yearFrom <= @Year and @Year <= Coalesce( yearTo, yearFrom ).

Если yearTo равно NULL, то для второго сравнения будет использоваться yearFrom, что делает его частью одного модельного года.

1 голос
/ 09 февраля 2020

Этот запрос даст вам результаты, которые вы хотите. Он ищет строки, где @year находится между yearFrom и yearTo, или если yearTo равно NULL, то yearFrom совпадает с @year:

SELECT *
FROM Table1
WHERE @year BETWEEN yearFrom AND yearTo
   OR yearTo IS NULL AND yearFrom = @year

Вывод:

yearFrom    yearTo
2009        2010
2010        2015
2010        (null)

Демонстрация по SQLFiddle

0 голосов
/ 09 февраля 2020

Вы можете попробовать этот способ, демонстрация на db <> fiddle

SELECT *
FROM Table1
WHERE (yearTo IS NULL AND yearFrom = @year) 
      OR (yearFrom <= @year and @year <= yearTo)

Выход

yearFrom    yearTo
2009        2010
2010        2015
2010        null
0 голосов
/ 09 февраля 2020

Я думаю, у вас есть логика c в обратном направлении:

and yearFrom <= @year and yearTo >= @year 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...