SQL — Как создать выборку, которая делает возможным поиск

#sql

#sql

Вопрос:

Я пытался создать поиск, в котором вы могли бы выполнять поиск, введя некоторую часть имени. Но когда поисковый ввод пуст, он показывает всех в таблице. Я пытался написать SQL для выбора *, когда поисковый ввод равен = » » (пустой), и для выбора *, который содержит хотя бы часть предложения при поиске в виде 1 символа или более, но каждый раз, когда я что-то пишу, это работает, но когда поисковый ввод пуст, выбирается любая строка. Мой код таков:

 SELECT * FROM [Table] WHERE [nome] LIKE '%@search%'
  

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

1. Пожалуйста, пометьте свой вопрос базой данных, которую вы используете.

2. Вопрос не ясен. Каков желаемый результат, если входной параметр пуст?

Ответ №1:

Предполагая, что вы используете SQL Server:

 WHERE [nome] LIKE '%'   coalesce(@search, '')   '%'
  

Однако вы могли бы рассмотреть возможность полнотекстового поиска с помощью contains() .

Редактировать:

Упс, я думал, ты хотел, чтобы запрос возвращал все, когда строка поиска пуста. Как насчет:

 WHERE [nome] LIKE '%'   @search   '%' AND @search <> ''
  

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

1. Это по-прежнему возвращает все строки, когда строка поиска пуста, чего, я думаю, она пытается избежать.

Ответ №2:

Это вернет строки, в которых поле nome пусто, если строка поиска пуста. Если ни в одной строке нет пустого [nome], то строки не возвращаются.

 SELECT * FROM [Table] WHERE [nome] Like Case When @search = '' Then '' Else '%'   @search   '%' end
  

Ответ №3:

Не забудьте преобразовать ваш столбец или параметр в nvarchar:

вот так:

ВЫБЕРИТЕ * ИЗ [таблицы], ГДЕ [nome] ИМЕЕТ ВИД ‘%’ ПРИВЕДИТЕ (@YourFieldOrParameter КАК NVARCHAR(MAX)) ‘%’