Если еще в Where Clause SQL - PullRequest
       1

Если еще в Where Clause SQL

0 голосов
/ 10 декабря 2018

Я столкнулся с проблемой SQL-запроса.У меня есть таблица с 10 полями.Мне нужно создать запрос, который получает дату по полю ProductionYear (int) между 2 переменными @startDate (int) и @endDate (int).Обе эти переменные не нужны.И мне нужно построить SQL-запрос со следующими условиями:

If(@endDate = 0)
Select Id from MyTable where ProductionYear > @startDate
else
Select Id from MyTable where ProductionYear BETWEEN @startDate and @endDate.

Как построить запрос со следующими условиями?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

вы можете попробовать, используя случай, когда

  Select Id from MyTable 
    where ProductionYear BETWEEN (case when @startDate>@endDate then @endDate
 else @startDate  end) and 
(case when @startDate>@endDate then @startDate else @endDate end)
0 голосов
/ 10 декабря 2018

Вы можете включить это в один запрос:

Select Id
from MyTable
where ProductionYear >= @startDate and
      (ProductionYear <= @endDate or @endDate = 0);

Ваши два запроса не согласуются с тем, включен ли @startDate.BETWEEN содержит значения сравнения, но > - нет.

Если вы хотите, чтобы @startDate также был необязательным:

Select Id
from MyTable
where (ProductionYear >= @startDate or @startDate = 0) and
      (ProductionYear <= @endDate or @endDate = 0);

Некоторые дополнительные комментарии.Называть «год» «датой» непонятно.Ваши параметры, вероятно, должны называться @startYear и @endYear.

Эти запросы приведут к полному сканированию таблицы вашей таблицы.Это, вероятно, не имеет большого значения, потому что гранулярность по годам.Если детализация была более точной, вы можете использовать индекс.В этом случае, возможно, лучший подход - это динамический SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...