Как получить записи, начиная с заданной строки из базы данных SQL Server? - PullRequest
14 голосов
/ 27 июля 2010

У меня есть база данных с большим количеством слов, которые будут использоваться в системе тегов. Я создал необходимый код для поля автозаполнения, но я не уверен, как наиболее эффективно извлечь соответствующие записи из базы данных.

Я знаю команду LIKE, но мне кажется, что это больше команда EQUAL. Я получаю только слова, которые выглядят точно так же, как и слова, которые я ввожу.

Мой план - прочитать каждую строку, а затем использовать функции C # string.StartsWith () и string.Contains (), чтобы найти слова, которые могут подойти, но я думаю, что с большой базой данных, это может быть неэффективно читать каждый ряд, а затем отфильтровать их.

Есть ли способ читать только строки, начинающиеся или содержащие данную строку из SQL Server?

Ответы [ 4 ]

33 голосов
/ 27 июля 2010

При использовании лайка вы предоставляете знак% в качестве подстановочного знака. Если вам нужны строки, начинающиеся с Hello, вы должны использовать LIKE 'Hello%'. Если вы хотите, чтобы строки с Hello были где-либо в строке, вы должны использовать LIKE '% Hello%'

Что касается эффективности, использование Like не является оптимальным. Вы должны посмотреть на полнотекстовый поиск.

8 голосов
/ 27 июля 2010

Я знаю о команде LIKE, но мне кажется, что это больше команда EQUAL. Я получаю только слова, которые выглядят точно так же, как и слова, которые я ввожу.

Это потому, что вы не используете подстановочные знаки:

WHERE column LIKE 'abc%'

... вернет строки, где значение column начинается с "abc". Я укажу, что при использовании подстановочных знаков, это единственная версия, которая может использовать индекс для столбца column ... er.

WHERE column LIKE '%abc%'

... вернет строки, где значение column содержит «abc» в любом месте. Подстановочный знак в левой части LIKE гарантирует, что индекс не может быть использован.

SQL Server изначально не поддерживает регулярные выражения - вы должны использовать функции CLR, чтобы получить доступ к функциональности. Но он работает наравне с НРАВИТСЯ.

Полнотекстовый поиск (FTS) - лучшее средство поиска текста.

2 голосов
/ 07 сентября 2016

Вы также можете реализовать функциональность StartWith, используя следующие операторы:

LEFT('String in wich you search', X) = 'abc'

CHARINDEX('abc', 'String in wich you search') = 1

'String in wich you search' LIKE 'abc%'

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

2 голосов
/ 27 июля 2010

Вы можете использовать CONTAINS в T-SQL, но я уверен, что вам нужно использовать полнотекстовое индексирование для таблицы, включенной в ваш запрос.

Содержит

Начало работы с полнотекстовым поиском

...