Как пропустить предложение where без If else в SQL-запросе динамически?

#sql #sql-server #tsql #case

#sql #sql-сервер #tsql #дело

Вопрос:

Я пытаюсь написать запрос, но WHERE предложение должно быть динамически применено, если данные поиска существуют, иначе пропустите эту часть в одном запросе.

 Declare @search_text varchar(50)='', @start_date datetime, @end_date datetime;  If(@search_text = '') begin  select * from Table1 where   CONVERT(VARCHAR(12), Mydate, 101) BETWEEN CONVERT(Date, @start_date) AND   CONVERT(Date,@end_date) end else   begin   select * from Table1 where column1 like '%' @search_text '%'  end   

Я пытаюсь это сделать, но это не работает:

  select * from Table1 where ( Case when ISNULL(@search_text,'') = '' Then CONVERT(VARCHAR(12), MyDate, 101) END  BETWEEN CONVERT(Date, @start_date) AND CONVERT(Date,@end_date) )  

Комментарии:

1. MySQL и SQL Server-это совершенно разные продукты; пожалуйста, отметьте их правильно.

2. Это для SQL Server. просто изменено

3. Примечание — ваши критерии поиска не поддаются проверке, какой тип данных соответствует вашей дате рождения ?

4. Почему вы меняете дату на varchar ?

5. Почему ваши параметры даты объявлены так, как datetime если бы вы, очевидно, беспокоились только о датах? Неаккуратный код провоцирует ошибки. Используйте эксклюзивную верхнюю границу даты, и вы можете безопасно игнорировать любые проблемы со временем в (предположительно) столбце даты и времени, на который вы ссылаетесь.

Ответ №1:

Вы можете объединить логику в одном запросе с помощью одного WHERE предложения:

 SELECT * FROM Table1 WHERE  @search_text = '' AND CONVERT(VARCHAR(12), Mydate, 101)  BETWEEN CONVERT(Date, @start_date) AND CONVERT(Date, @end_date) OR  @search_text lt;gt; '' AND column1 LIKE '%'   @search_text   '%';