Уточнить запрос с датой даты SQL

Попытка запроса, когда, заданные параметры @startDate и @endDate, запись происходит в течение как можно большего количества времени. У меня есть функция where where ниже, но я подозреваю, что она может быть более прямой.

Если дана дата окончания, записи не будут выбраны после этой даты. Если дана дата начала, записи не будут выбраны до этой даты. Если даты не указаны, будут выбраны все записи.

SELECT * 
FROM myTable
WHERE
 (
 (@startDate IS NULL AND ((@endDate IS NULL) OR (myTable.[recordDate] <= @endDate)))
 OR
 (@endDate IS NULL AND ((@startDate IS NULL) OR (myTable.[recordDate] >= @startDate)))
 OR
 (myTable.[recordDate] BETWEEN @startDate AND @endDate)
 )
2 ответа

Вы можете обойти ISNULL функцию с ISNULL функции ISNULL как ISNULL ниже:

SELECT * FROM myTable
WHERE myTable.[recordDate] >= ISNULL(@startDate, '01/01/1900')
AND myTable.[recordDate] <= ISNULL(@endDate, getDate())

Этот запрос будет выбирать все строки, которые:

  • Между @startDate и @endDate, включая оба
  • Между @startDate и текущим временем даты, если @endDate имеет значение null
  • Между 01.01.1900, если @startDate имеет значение null и сегодняшнее время, если @endDate имеет значение null
  • Между 01.01.1900, если @startDate имеет значение null и @endDate


Настройте temp tableceiling с полом и потолком и присоединитесь к столу по дате МЕЖДУ полом и потолком. Установите неограниченные условия (NULL) как 1/1/1900 и 12/31/9999. Недавно коллега показал мне это, и это сработало.

licensed under cc by-sa 3.0 with attribution.