SQL условный оператор where с одним диапазоном дат и дат - PullRequest
0 голосов
/ 26 июня 2018

Использование Sybase.

У меня есть процедура сохранения, принимающая несколько параметров.

@ param1 и @ date1 всегда будут иметь значения, но @ param2, @ param3 и @ date2 являются необязательными.

Я написал что-то вроде этого.

(@param1, @param2, @param2, @date1, @date2)

SELECT * FROM table
WHERE col1 = @param1
AND col2 = COALESCE(NULLIF(@param2,''), col2)
AND col3 = COALESCE(NULLIF(@param3,''), col3)
AND
IF(@date2 is empty)
  col4 = @date1
ELSE
  col4 IS BETWEEN @date1 AND @date2

Нужна помощь в написании последней части. Если условие с датами.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Самый элегантный способ - написать последнюю часть как:

AND col4 between @date1 and coalesce(@date2, @date1)

Таким образом, если @ date2 равно нулю, условие будет работать так:

AND col4 between @date1 and @date1

, что равно:

AND col4 >= @date1 and col4 <= @date1

, что равно:

AND col4 = @date1
0 голосов
/ 26 июня 2018

if не принадлежит там. И это не нужно:

SELECT *
FROM table
WHERE col1 = @param1 AND
     col2 = COALESCE(NULLIF(@param2,''), col2) AND
     col3 = COALESCE(NULLIF(@param3,''), col3) AND
     ( (@date2 IS NULL AND col4 = @date1) OR
       col4 IS BETWEEN @date1 AND @date2
     )
...