Как получить записи, начинающиеся с данной строки из базы данных 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) - лучший способ поиска текста.

Ответ 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%'

Используйте тот, который лучше всего работает.