#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)) ‘%’