Как получить записи, начинающиеся с данной строки из базы данных SQL Server?
У меня есть база данных с множеством слов, которые будут использоваться в системе тегов. Я создал необходимый код для блока автозаполнения, но я не уверен, как наиболее эффективно использовать соответствующие записи из базы данных.
Я знаю команду LIKE, но мне кажется, что это больше команда EQUAL. Я получаю только слова, которые выглядят точно так же, как слово, которое я вводил.
Мой план состоит в том, чтобы читать каждую строку, а затем использовать функции С# string.StartsWith() и string.Contains() для поиска слов, которые могут поместиться, но я думаю, что с большой базой данных может быть неэффективно читать каждая строка, а затем фильтровать их.
Есть ли способ читать только строки, которые начинаются с или содержат заданную строку из SQL Server?
Ответы
Ответ 1
При использовании подобным образом вы указываете знак% в качестве шаблона. Если вам нужны строки, начинающиеся с Hello, вы должны использовать LIKE 'Hello%'. Если вам нужны строки с Hello в любом месте строки, вы должны использовать LIKE '% Hello%'
Что касается эффективности, использование Like не является оптимальным. Вы должны изучить полнотекстовый поиск.
Ответ 2
Я знаю команду LIKE, но мне кажется, что это больше команда EQUAL. Я получаю только слова, которые выглядят точно так же, как слово, которое я вводил.
Это потому, что вы не используете подстановочные знаки:
WHERE column LIKE 'abc%'
... будет возвращать строки, где значение column
начинается с "abc". Я укажу, что при использовании подстановочных знаков это единственная версия, которая может использовать индекс в столбце column
... er.
WHERE column LIKE '%abc%'
... вернет строки, где значение column
содержит "abc" в любом месте. Подстановочная левая сторона LIKE гарантирует, что индекс не может использоваться.
SQL Server не поддерживает регулярные выражения - вам нужно использовать функции CLR для доступа к функциям. Но он работает наравне с LIKE.
Полнотекстовый поиск (FTS) - лучший способ поиска текста.
Ответ 3
Вы можете использовать CONTAINS
в T-SQL, но я уверен, что вам нужно будет использовать полнотекстовую индексацию для таблицы, участвующей в вашем запросе.
Содержит
Начало работы с полнотекстовым поиском
Ответ 4
Вы также можете реализовать функцию StartWith, используя следующие инструкции:
LEFT('String in wich you search', X) = 'abc'
CHARINDEX('abc', 'String in wich you search') = 1
'String in wich you search' LIKE 'abc%'
Используйте тот, который лучше всего работает.