Sql поиск подстроки в строке: Функция LOCATE — поиск подстроки

регулярные выражения — SQL — Поиск подстрок в строке, удовлетворяющих условию


Вопрос задан


Изменён
5 месяцев назад


Просмотрен
221 раз

Задача такая. Есть таблица с колонкой, в которой хранятся строки. Например, 2 записи в таблице:

  • значение в колонке у первой записи: «<!test><!innertest>car</!innertest></!test><!test><!innersupertest>car2</!innersupertest></!test>»
  • значение в колонке у второй записи: «<!test><!innersupertest>car1</!innersupertest></!test>»

Нужен запрос, который для каждой записи в таблице будет проверять данную колонку на существование подстрок «<!test>. ..</!test>», в которых не существет подстроки «<!innersupertest>…</!innersupertest>».
То есть для первой записи мы получим 2 подстроки «<!test>…</!test>»:

  • <!test><!innertest>car</!innertest></!test>
  • <!test><!innersupertest>car2</!innersupertest></!test>

Из них нам подойдет 1-я, потому что там нет «<!innersupertest>…</!innersupertest>». Значит, первая запись в таблице подошла.

Для второй записи мы получим 1 подстроку «<!test>…</!test>»:

  • <!test><!innersupertest>car1</!innersupertest></!test>

В ней есть подстрока «<!innersupertest>…</!innersupertest>», значит вся запись не подходит.

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

  • sql
  • регулярные-выражения
  • sql-server
  • запрос






3







Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации


Почта

Необходима, но никому не показывается




Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки


Как лучше искать по текстовому полю?

 
ocean
 
(2009-04-15 12:49)
[0]

Я хочу часто проводить поиск по полю varchar(2500) на вхождению подстроки в любом месте, соответственно нужно максимально ускорить этот поиск. Проиндексировать поле MS SQL не дал, мол максимум 900 символов. Что можно предпринять? Как лучше искать, Locate или SQL select?


 
Sergey13 ©
 
(2009-04-15 13:03)
[1]

> [0] ocean   (15.04.09 12:49)
> Как лучше искать, Locate или SQL select?

Сделай и сравни. Делов то на 10 минут.


 
Кщд
 
(2009-04-15 13:07)
[2]

>ocean   (15.04.09 12:49)  
в случае с произвольной подстрокой индекс бы ничего не дал в плане производительности)


 
Sergey13 ©
 
(2009-04-15 13:14)
[3]

> [0] ocean   (15.04.09 12:49)

А что в этом поле? Как много азписей в таблице? Как часто надо искать?
Возможно неплохим решением будет создать подчиненную таблицу ключевых слов текста для поиска.


 
ocean
 
(2009-04-15 13:51)
[4]

В поле плоский текст. Не знаю как оценить частоту, допустим раз в неск. секунд. С ключевыми словами интересная мысль, но тогда надо придумать, как их вычленять?


 
Ega23 ©
 
(2009-04-15 13:53)
[5]

Можно попробовать FullTextSearch подключить. Но не факт, что это офигенную скорость даст.


 
sniknik ©
 
(2009-04-15 13:55)
[6]

> Возможно неплохим решением будет создать подчиненную таблицу ключевых слов текста для поиска.
в mssql это уже есть, называется полнотекстовый поиск. нужно просто включить, и пользоваться.


 
Ega23 ©
 
(2009-04-15 14:08)
[7]


> в mssql это уже есть, называется полнотекстовый поиск. нужно
> просто включить, и пользоваться.

Тяжелый он очень в MSSQL. К сожалению. И я не нашёл, как его настраивать тонко можно (игрался с MSSQL 2000).


 
ocean
 
(2009-04-15 14:40)
[8]

Прочитал про полнотекстовый поиск, выглядит как то что нужно, но:
«к сожалению в SQL Server изначально не реализована возможность полнотекстового поиска на русском, украинском языках.» Это все Кондолиза устроила. Не понял, как включить таблицу в полнотекстовый поиск не из среды MSSQL, а программно. Сейчас погоняю.


 
Anatoly Podgoretsky ©
 
(2009-04-15 15:23)
[9]

> ocean  (15. 04.2009 12:49:00)  [0]

К поиску тут относится только Locate


 
Anatoly Podgoretsky ©
 
(2009-04-15 15:30)
[10]

Индексы или полнотекстовый поиск для подстроки, придется строить по всем вариантам поиска!
вариант
ариант
риант
иант
ант

и это только по одному слову, а не по совокупности слов строки.


 
Anatoly Podgoretsky ©
 
(2009-04-15 15:43)
[11]


> К поиску тут относится только Locate

Но и его нельзя применить для поиска подстроки.
Надо отказаться от поиска и заменить выборкой с отбором по подстроке. Медленно, но что делать.


 
stas ©
 
(2009-04-15 17:09)
[12]

ocean   (15. 04.09 14:40) [8]
MSSQL 2005 юзай.


 
clickmaker ©
 
(2009-04-15 17:55)
[13]

> к сожалению в SQL Server изначально не реализована возможность
> полнотекстового поиска на русском

реализована (начиная с 2005 точно), но не включена по умолчанию


 
ANB
 
(2009-04-16 12:11)
[14]

А как в оракле такую фичу подключить ?
Я задрался уже запросы распараллеливать ради такой ерунды.
И писать разбивку по словам для нашей базы — очень неоптимально — места уже впритык на сервере.


 
sniknik ©
 
(2009-04-16 13:03)
[15]

> такую фичу подключить ?
> места уже впритык на сервере.
а как ты думаешь эта фича реализована? где она будет хранить разбивку/индексы?


 
Кщд
 
(2009-04-16 13:08)
[16]

>ANB   (16.04.09 12:11) [14]
>А как в оракле такую фичу подключить ?
interMedia


 
Кщд
 
(2009-04-16 13:11)
[17]

>Кщд   (16.04.09 13:08) [16]
если информация структурирована, то нам, например, отлично помог ctx-индекс для поиска по достаточно большому хранилищу XML-документов


 
ANB
 
(2009-04-16 17:44)
[18]


> если информация структурирована

Если бы. Это имя клиента, вбитое как попало.


sql — Найти подстроку в строке

спросил

Изменено
6 лет, 4 месяца назад

Просмотрено
11 тысяч раз

Можно ли проверить, содержится ли определенная подстрока в столбце SQL Server в предоставленной пользователем строке?

Пример:

 SELECT * FROM Table WHERE 'случайные слова для проверки, содержащиеся в строке' CONTAINS Column
 

Насколько я понимаю, CONTAINS не может выполнять такой поиск.

РЕДАКТИРОВАТЬ:

У меня есть полностью проиндексированный текст, и я хотел бы выполнить поиск (самым быстрым методом), если строка, предоставленная мной, содержит слова, которые присутствуют в столбце.

  • sql
  • sql-сервер
  • sql-сервер-2016

1

Вы можете использовать LIKE :

 SELECT * FROM YourTable t
WHERE 'случайные слова . ...' LIKE '%' + t.column + '%'
 

Или

 ВЫБЕРИТЕ * ИЗ YourTable t
ГДЕ t.column LIKE '%случайные слова ....%'
 

В зависимости от того, что вы имели в виду, сначала выберите записи, в которых столбец содержит часть предоставленной строки. Второй наоборот.

4

Просто используйте синтаксис LIKE вместе с % вокруг строки, которую вы ищете:

 SELECT
   *
ОТ
   Таблица
КУДА
   Столбец LIKE '% какая-то случайная строка%'
 

Это вернет все строки в таблице table , в которой столбец Столбец содержит текст «какая-то случайная строка».

0

1) Если вы хотите получить данные, начинающиеся с какой-либо буквы, вы можете использовать % этот оператор, подобный этому, в вашем предложении where

 WHERE
Столбец LIKE "%случайная строка"
 

2) Если вы хотите, чтобы данные содержали любую букву, вы можете использовать

 ГДЕ
Столбец LIKE "%случайная строка%"
 

3) если вы хотите получить данные, оканчивающиеся на какую-либо букву, вы можете использовать

 ГДЕ
Столбец LIKE "какая-то случайная строка%"
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Как выполнить поиск подстроки с помощью SQL

Хизар Хаят Саани

Устали от LeetCode? 😩

Изучите 24 паттерна, чтобы решить любой вопрос на собеседовании по программированию, не заблудившись в лабиринте практических задач в стиле LeetCode. Практикуйте свои навыки в практической среде кодирования, не требующей настройки. 💪

Поиск подстроки позволяет нам искать определенные части более длинных строк. Это часто облегчает поиск строк в нашей базе данных.

Есть несколько способов выполнить поиск подстроки в таблице в нашей базе данных с помощью SQLStructured Query Language: используется для связи с базой данных.

Успешный поиск подстроки ‘wonderful’

Используя

%

Используя символ % , мы можем определить базовое выражение подстроки, которую мы ищем.

Символ % в основном относится к оставшимся символам строки .

Давайте рассмотрим несколько примеров:

 SELECT Имя пользователя
ОТ ПОЛЬЗОВАТЕЛЕЙ
ГДЕ имя пользователя типа «A%»
 

Приведенный выше запрос возвращает таблицу, содержащую все имена пользователей , начиная с и заканчивая A .

Аналогично, следующий запрос возвращает таблицу, содержащую все имена пользователей , заканчивающиеся на A :

 SELECT Username
ОТ ПОЛЬЗОВАТЕЛЕЙ
ГДЕ имя пользователя, например "%A"
 

Чтобы найти подстроку между более длинной строкой, мы должны просто добавить % в начале и в конце подстроки.

Следующий запрос возвращает таблицу, содержащую все имена пользователей с A между .

 ВЫБЕРИТЕ Имя пользователя
ОТ ПОЛЬЗОВАТЕЛЕЙ
ГДЕ имя пользователя, например "%A%"
 

Мы также можем уточнить при поиске подстрок. Следующий запрос возвращает все строки, содержащие I в качестве третьего символа :

 SELECT Имя пользователя
ОТ ПОЛЬЗОВАТЕЛЕЙ
ГДЕ Имя пользователя типа «--I%»
 

Мы можем использовать % знак различными способами для поиска подстроки в нашей базе данных.

Использование

CHARINDEX()

Функция SQL CHARINDEX() ищет подстроку, которая начинается с указанного места внутри строки.

Эта функция возвращает позицию найденной подстроки в искомой строке или ноль , если подстрока не найдена.

Индексация начинается с 1 . Таким образом, вывод 0 означает, что подстрока не найдена.

Ниже приведен прототип функции:

 CHARINDEX(_substring, _string, _start)
 

Параметр _start — это начальный индекс поиска.