Разное

Поиск подстроки в строке sql: О строковых функциях SQL или как манипулировать текстом в базе данных MySQL : WEBCodius

Быстрый способ найти строку по подстроке в SQL?

вы можете добавить еще один вычисляемый столбец в таблицу: titleLength как LEN (title) сохраняется. Это сохранит длину столбца «title». Создайте индекс на этом.

кроме того, добавьте еще один вычисляемый столбец с именем: ReverseTitle как Reverse(title).

теперь, когда кто-то ищет ключевое слово, проверьте, совпадает ли длина ключевого слова с titlelength. Если да, выполните поиск»=». Если длина ключевого слова меньше длины titleLength, то сделайте подобное. Но сначала сделать название вроде ‘АБВ%’, то сделать reverseTitle как ‘ЦБА%’. Подобный подход Брэда — т. е. вы делаете следующий сложный запрос только при необходимости.

кроме того, если правила 80-20 применяются к вашим ключевым словам/ подстрокам (т. е. если большинство поисков находятся на меньшинстве ключевых слов), то вы также можете рассмотреть возможность кэширования. Например: скажем, вы обнаружите, что многие пользователи ищут ключевое слово «abc» , и этот поиск по ключевым словам возвращает записи с идентификаторами 20, 22, 24, 25 — вы можете хранить это в отдельной таблице и индексировать.
И теперь, когда кто-то ищет новое ключевое слово, сначала посмотрите в этой таблице «кэш», чтобы увидеть, был ли поиск уже выполнен предыдущим пользователем. Если это так, не нужно снова смотреть в главной таблице. Просто верните результаты из таблицы «cache».

вы также можете объединить вышеуказанное с SQL Server TextSearch. (если у вас есть веская причина не использовать его). Но, тем не менее, вы можете использовать текстовый поиск сначала для короткого списка результирующего набора. а потом запустить SQL-запрос к вашей таблице для получения точных результатов, используя идентификаторы, возвращаемые текстовым поиском в качестве параметра вместе с ключевым словом.

все это, очевидно, предполагает, что вы должны использовать SQL. Если нет, вы можете исследовать что-то вроде Apache Solr.

3

автор: Dharmendar Kumar ‘DK’

Функция LOCATE — поиск подстроки

Функция LOCATE осуществляет поиск подстроки в строке,
возвращает позицию ее первого символа.

Учтите, что нумерация символов начинается с 1.

В отличие от функции POSITION функция LOCATE
может начинать поиск не с начала строки, а с определенного места.

См. функции
POSITION и
INSTR,
которые также осуществляют поиск по строке.

Синтаксис

SELECT LOCATE(что_ищем, поле) FROM имя_таблицы WHERE условие
SELECT LOCATE(что_ищем, поле, начало_поиска) FROM имя_таблицы WHERE условие

Примеры

Все примеры будут по этой таблице texts, если не сказано иное:

id
айди
text
текст
1Очень длинный текст!
2Не очень длинный текст!
3Просто текст!

Пример

В данном примере в тексте ищется позиция слова ‘длинный’:

SELECT *, LOCATE('длинный', text) as pos FROM texts

SQL запрос выберет следующие строки:

id
айди
text
текст
pos
позиция подстроки
1Очень длинный текст!7
2Не очень длинный текст!10
3Просто текст!0

Пример

В данном примере в тексте ищется позиция слова ‘длинный’,
поиск начинается с 8-го символа строки:

SELECT *, LOCATE('длинный', text, 8) as pos FROM texts

SQL запрос выберет следующие строки:

id
айди
text
текст
pos
позиция подстроки
1Очень длинный текст!0
2Не очень длинный текст!10
3Просто текст!0

Найти индекс последнего вхождения подстроки с помощью T-SQL

этот ответ соответствует требованиям OP. в частности, он позволяет игле быть более одного символа, и он не генерирует ошибку, когда игла не найдена в стоге сена. Мне казалось, что больше всего (все?) из других ответов не обрабатывались эти крайние случаи. Кроме того, я добавил аргумент «Начальная позиция», предоставленный собственной функцией MS SQL server CharIndex. Я попытался точно отразить спецификацию для CharIndex, за исключением обработки справа налево вместо слева направо. например, я возвращаю null, если игла или стог сена равно null, и я возвращаю ноль, если игла не найдена в стоге сена. Одна вещь, которую я не мог обойти, заключается в том, что со встроенной функцией третий параметр является необязательным. С пользовательскими функциями SQL Server все параметры должны быть предоставлены в вызове, если функция не вызывается с помощью «EXEC». Хотя третий параметр должен быть включен в список параметров, вы можете указать ключевое слово «default» в качестве заполнителя для него без необходимость дать ему значение (см. примеры ниже). Поскольку легче удалить третий параметр из этой функции, если это нежелательно, чем добавить его, если это необходимо, я включил его здесь в качестве отправной точки.

create function dbo.lastCharIndex(
 @needle as varchar(max),
 @haystack as varchar(max),
 @offset as bigint=1
) returns bigint as begin
 declare @position as bigint
 if @needle is null or @haystack is null return null
 set @position=charindex(reverse(@needle),reverse(@haystack),@offset)
 if @position=0 return 0
 return (len(@haystack)-(@position+len(@needle)-1))+1
end
go

select dbo.lastCharIndex('xyz','SQL SERVER 2000 USES ANSI SQL',default) -- returns 0
select dbo.lastCharIndex('SQL','SQL SERVER 2000 USES ANSI SQL',default) -- returns 27
select dbo.lastCharIndex('SQL','SQL SERVER 2000 USES ANSI SQL',1) -- returns 27
select dbo.lastCharIndex('SQL','SQL SERVER 2000 USES ANSI SQL',11) -- returns 1

Проверьте, содержит ли строка подстроку в SQL Server 2005 с помощью хранимой процедуры

Я строку @mainString = 'CATCH ME IF YOU CAN'. Я хочу проверить, является ли слово ME внутри @mainString.

Как проверить, имеет ли строка определенную подстроку в SQL?

4 ответов


функция charindex () ищет подстроку в большей строке и возвращает позицию совпадения или 0, если совпадение не найдено

if CHARINDEX('ME',@mainString) > 0
begin
    --do something
end

редактировать или от ответа Дэниелса, если вы хотите найти слово (а не подкомпоненты слов), ваш вызов CHARINDEX будет выглядеть так:

CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ')

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

329

автор: Damien_The_Unbeliever


вы можете просто использовать подстановочные знаки в предикате (после IF, WHERE или ON):

@mainstring LIKE '%' + @substring + '%'

или в этом конкретном случае

' ' + @mainstring + ' ' LIKE '% ME[., ]%'

(поместите пробелы в цитируемую строку, если вы ищете все слово, или оставьте их, если я могу быть частью большего слова).

105

автор: Daniel Quinlan


DECLARE @str VARCHAR(255)
SET @str = 'this is @n $tring'

IF (@str LIKE '%[^a-zA-Z0-9]%')
    PRINT 'have some ''special'' characters'
ELSE
    PRINT 'have not ''special'' characters'

может это поможет вам.


вы не говорите, какой вкус SQL (т. е. какая база данных), но в Oracle вы можете использовать instr (), а в SQL Server вы можете использовать SUBSTRING ()

-9

автор: Michael Howard-MSFT


Как проверить, содержит ли строка подстроку в SQL Server

SQL содержит строку — В этом блоге я объясню, как проверить определенное слово или символ в заданном операторе SQL Server с помощью функции CHARINDEX или SQL Server и проверить если строка содержит определенную подстроку с функцией CHARINDEX.

Альтернативой CHARINDEX () является использование предиката LIKE.

Способ 1. Использование функции CHARINDEX ()

CHARINDEX ()

Эта функция используется для поиска определенного слова или подстроки в общей строке и возвращает ее начальную позицию соответствия.Если слово не найдено, возвращается 0 (ноль).

Давайте разберемся в этом на примерах.

Синтаксис

  1. CHARINDEX (SearchString, WholeString [, startlocation])

Пример

  1. Объявить @mainString nvarchar (100) = ‘Amit Kumar Yadav’
  2. 900EX31 if CHARITIND ‘(if CHARITIND’ , @ mainString)> 0

  3. начало
  4. выберите «Найти» в качестве результата
  5. конец
  6. еще
  7. выберите «Не найти» в качестве результата

Выходные данные

Метод 2 — Использование LIKE Predicate

Оператор предиката LIKE может использоваться для поиска подстроки в строке или содержимом.Оператор LIKE в сочетании с% и _ (подчеркивание) используется для поиска еще одного символа и одного символа соответственно. Вы можете использовать оператор%, чтобы найти подстроку.

В следующем SQL-запросе мы будем искать в строке подстроку «Kumar».

  1. DECLARE @WholeString VARCHAR (50)
  2. DECLARE @ExpressionToFind VARCHAR (50)
  3. SET @WholeString = ‘ Амит Кумар Ядав ‘
  4. SET @ExpressionToFind =’ Kumar ‘
  5. IF @WholeString LIKE’% ‘+ @ExpressionToFind +’% ‘
  6. PRINT’ Да, это найти ‘
  7. ELSE
  8. PRINT’ Это не ‘ ‘t find’

Выходные данные

Этот метод также можно использовать в предложении WHERE операторов SELECT, UPDATE и DELETE.Следующее предложение SELECT выбирает записи из таблицы Employees базы данных Northwind, где Employee’s Title содержит подстроку «Продажи».

SELECT [EmployeeID]

, [LastName]

, [FirstName]

, [Title]

FROM [NORTHWND]. [Dbo]. [Employee]

WHERE Title LIKE ‘% Sales%’

Вывод вышеуказанного запроса возвращает следующие результаты.

Сводка

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

.

Обзор функции подстроки SQL

Требование рефакторинга данных очень распространено и жизненно важно в операциях интеллектуального анализа данных. В предыдущей статье «Строковые функции SQL для преобразования данных» вы познакомитесь с советами по началу работы со строковыми функциями SQL, включая функцию подстроки для преобразования данных в SQL Server. Поскольку все мы согласны с тем, что данные, хранящиеся в одной форме, иногда требуют преобразования, мы рассмотрим некоторые общие функции или задачи для изменения регистра строки, преобразования значения в другой тип, обрезки значения и замены конкретная строка в поле и так далее.

Прочитав эту статью, вы узнаете больше о:

  1. Строковые функции SQL
  2. Понять функцию SQL Server SUBSTRING
  3. Как обрабатывать данные с его помощью
  4. Как использовать функцию SQL Server SUBSTRING в предложении where
  5. Как динамически определять положение начального и конечного символа
  6. Как работать со строкой даты и времени с помощью функции SQL Server SUBSTRING
  7. Как создать простой подвыбор с помощью функции T-SQL SUBSTRING
  8. И более…

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

Требуется три аргумента.

  • Первое — это поле , по которому мы хотим запросить.
  • Второй аргумент — это начальный символ ,
  • и третий аргумент — это конечный символ

Синтаксис функции SQL Server SUBSTRING следующий:

SUBSTRING (выражение, позиция, длина)

Параметры:

  • выражение : исходная строка ввода
  • позиция : Целочисленное значение, указывающее начальную позицию, из которой символы могут быть извлечены из данного выражения.Первая позиция выражения всегда начинается с 1. Начальная позиция может быть отрицательным целым числом.
  • длина : положительное целое число. Он определяет конечный предел и определяет, сколько символов будет извлечено из данного выражения.

Примечание. Обход функции подстроки SQL всегда выполняется слева направо.

Примеры

В этом разделе мы рассмотрим некоторые реальные сценарии с использованием строковых функций SQL.Для некоторых демонстраций используется база данных Adventureworks2016, а для некоторых других данные SQL генерируются вручную. Давайте запачкаем руки и посмотрим, что будет дальше.

  1. Простая обработка данных с помощью функции подстроки SQL Server

Начнем с простого SQL-запроса. В следующем примере возвращается часть строки символов, начиная с начальной позиции 1, и извлекается 5 символов из начальной позиции. Функция T-SQL SUBSTRING очень полезна, когда вы хотите убедиться, что строковые значения, возвращаемые из запроса, будут ограничены определенной длиной.

ВЫБЕРИТЕ Имя, подстроку (имя, 1,5), Фамилию FROM Person.Person

В следующих выходных данных, используя функцию SQL Server SUBSTRING и указав столбец ‘firstname’, начальную позицию, равную единице, и длину пяти символов, выполнение этого запроса SQL приведет к усечению длины строк, возвращаемых из таблицы. длиной до пяти символов.Не имеет значения, если само значение в таблице длиннее пяти символов.

Далее параметр 3 rd , длина, определенная как 15. Это гарантирует, что длина данных, хранящихся в самом столбце таблицы, не имеет значения, запрос вернет только первые 15 символов. Это может быть полезно, чтобы убедиться, что вывод данных запроса отформатирован в соответствии с нашими ожиданиями или требованиями нашего приложения.

ВЫБЕРИТЕ Имя, подстроку (имя, 1,15), Фамилию FROM Person.Person

Далее измените начальную позицию, а также параметр длины, длину, определенную как 10.

ВЫБРАТЬ Имя, подстрока (Имя, 2,5), Фамилия ОТ человека.Человек

Увеличение длины до 10 символов приведет к отображению более длинных строковых значений. При изменении начальной позиции на 2 начнется подсчет символов от 2 до строки. В этом случае функция substring извлекает 10 символов строки, начиная со второй позиции. Функция SUBSTRING SQL очень полезна, когда вы хотите убедиться, что строковые значения, возвращаемые из запроса, будут ограничены определенной длиной.

Итак, вы получили представление о том, как работает функция SQL SUBSTRING. Поле, в котором мы хотим действовать, мы начинаем с какого символа и заканчиваем каким символом

  1. Использование функции SQL Server SUBSTRING в предложении where

В следующем примере с использованием столбца «firstname» последние два символа сопоставляются со словом «on» с помощью функции SQL SUBSTRING в предложении where.

ВЫБЕРИТЕ РАЗЛИЧНОЕ Имя, Фамилия

ИЗ

Лиц.Человек

WHERE

SUBSTRING (FirstName, LEN (FirstName) -1,2) = ‘on’

  1. Динамическое определение начального и конечного символа

В следующем примере входная строка содержит буквенно-цифровые символы. Используя функцию SQL Server Substring, числовое подмножество строки из столбца col преобразуется с помощью CHARINDEX. Вы также можете использовать строковую функцию SQL PATINDEX, чтобы найти начальную позицию и параметр длины функции SQL SUBSTRING.

ТАБЛИЦА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ Dummy;

CREATE TABLE Dummy (col varchar (20));

INSERT INTO Dummy

(col)

VALUES

(‘NY-123 US’),

(‘AZ-456 GB’),

(‘MI-789 MO’);

выберите подстроку

(col,

charindex (‘-‘, col, 1) +1,

charindex (», col, 1) -charindex (‘-‘, col, 1)

) от Dummy;

ИЛИ

ТАБЛИЦА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ Dummy;

CREATE TABLE Dummy (col varchar (20));

INSERT INTO Dummy

(col)

VALUES

(‘NY-123 US’),

(‘AZ-456 GB’),

(‘MI-789 MO’);

выберите подстроку

(столбец,

PATINDEX (‘% -%’, col) +1,

PATINDEX (‘%%’, col) — PATINDEX (% -%, col)

) из Манекен;

В этом примере с помощью функции SQL PATINDEX найдена начальная позиция строки «-».Но числовое значение начинается только со следующей позиции, поэтому к исходной позиции добавляется «1». Точно так же длина вычисляется путем поиска следующей позиции «‘ (пробел) и вычитания ее значения из начальной позиции дает длину. Теперь у нас есть значения для всех аргументов. Запустите оператор T-SQL.

  1. Работа со строками DateTime

В следующем примере вы можете видеть, что столбец col имеет набор данных, и это строка даты и времени.Используя функцию SQL Server SUBSTRING, входные значения усекаются с помощью функции CHARINDEX или PATINDEX для получения значения даты и времени. Затем производная строка приводится к типу DateTime, чтобы ее можно было использовать для сравнения с другими значениями DateTime. В этом случае он сравнивается с функцией SQL GETDATE ().

Вы можете легко найти начальную позицию и преобразовать данные в требуемый тип данных (допустимые значения) с помощью функций преобразования или приведения. Используя CHARINDEX, найдите позицию «/» в столбце ввода.После нахождения позиции значение вычитается на «3», чтобы получить начальное значение «12» для функции SQL SUBSTRING. Аналогичным образом выполняется поиск позиции символа ’,’ (запятая). Таким образом, вычитание значения из начальной позиции даст длину строки.

ТАБЛИЦА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ Dummy;

CREATE TABLE Dummy (col varchar (100));

INSERT INTO Dummy

VALUES

(«Дата 18.04.2015, 08:00:00, суббота»),

(«Дата 20.02.2016, 07:00:00 , воскресенье ‘),

(‘ Дата 13.03.2017, 10:00:00, понедельник ‘),

(‘ Дата: 07.06.2018, 09:00:00, вторник ‘ )

GO

выберите col, charindex (‘/’, col, 1) -3, charindex (‘,’, col, 1) -charindex (‘/’, col, 1),

подстрока

(col,

charindex (‘/’, col) -3, charindex (‘,’, col) -charindex (‘/’, col) +3

) из ​​Dummy

выберите col, patindex (‘% is%’, col) + 4, patindex (‘%,%’, col), patindex (‘%,%’, col) -patindex (‘% is%’, col) -5,

подстрока

(col,

patindex (‘% is%’, col) + 4, patindex (‘%,%’, col) -patindex (‘% is%’, col) -4

)

из Dummy

, где getdate () — 300> = cast (подстрока

(col,

patindex (‘% is%’, col) + 4, patindex (‘%,%’, col) — patindex (‘% is%’, col) -4) как datetime)

  1. Создание простого подвыбора

Подвыбор в SQL Server, по сути, является вложенным оператором выбора.В SQL результатом оператора select фактически является таблица. Обычно он просто существует в памяти, но его всегда можно использовать, как если бы вы использовали таблицу. Из-за этого оператор выбора может использоваться в качестве источника данных для другого оператора выбора.

В следующем примере вы можете увидеть, как столбцы преобразуются с помощью функции SQL Server SUBSTRING и используются в качестве таблицы для оператора SQL join .

Если вы видите значения временной таблицы, первые два символа первого столбца представляют состояние, а следующие четыре символа представляют код состояния.Аналогично, во втором столбце первые два символа представляют страну, а остальные четыре символа образуют код страны. Используя функцию SQL SUBSTRING, два столбца эффективно анализируются и преобразуются в четыре новых столбца. Эти столбцы можно использовать так же, как если бы они были таблицей в базе данных. В операторе select он объединен с таблицей страны, так что мы действительно можем найти название страны.

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

21

22

23

24

25

26

27

28

ТАБЛИЦА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ Страна;

CREATE TABLE Country (CCode int, CNAME VARCHAR (20))

INSERT INTO Country VALUES (1234, ‘Great Britain’), (5678, ‘UNITED STATES’),

(4567, ‘FRANCE’)

ВЫБРАТЬ * ИЗ страны

ТАБЛИЦА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ temp;

СОЗДАТЬ ТАБЛИЦУ temp (Id1 VARCHAR (6), Id2 VARCHAR (6))

INSERT INTO temp VALUES (‘NY1234’, ‘US5678’),

(‘AZ5678’, ‘GB1234’),

(‘ CA9012 ‘,’ FR4567 ‘)

ВЫБРАТЬ * FROM temp;

SELECT SUBSTRING (Id1, 1, 2) AS State, SUBSTRING (Id1, 3, len (ID1)) AS SCode, SUBSTRING (Id2, 1, 2) AS Country,

SUBSTRING (Id2, 3, len (id2)) КАК CCode FROM temp;

SELECT co.CName, ss.CCode FROM

Country co

INNER JOIN (

SELECT SUBSTRING (Id1, 1, 2) AS State, SUBSTRING (Id1, 3, len (ID1)) AS SCode, SUBSTRING (Id2, 1, 2) ) AS Country,

SUBSTRING (Id2, 3, len (id2)) AS CCode FROM temp

) AS ss

ON co.CCode = ss.CCode

;

Примечание: вы также можете использовать строковые функции RIGHT и LEFT. Вы можете обратиться к статье Строковые функции SQL для Data Munging (Wrangling) для получения дополнительной информации.

ВЫБРАТЬ влево (Id1,2) Состояние AS, справа (Id1, 4) AS SCode, слева (Id2,2) AS Страна, справа (Id2, 4) AS CCode FROM temp;

Сводка

До сих пор мы видели несколько примеров функции SUBSTRING в SQL Server, символьных функций, которые SQL Server делает легко доступными для использования, и того, как вы можете использовать их для управления строковыми значениями в вашей базе данных и в наборе результатов.Таким образом, полезно убедиться, что выходные данные SQL-запроса отформатированы в соответствии с ожиданиями или бизнес-требованиями.

Нам также необходимо понимать важность набора данных. Всегда рекомендуется тщательно проверять входное значение. Существует несколько способов преобразования данных с помощью функции T-SQL SUBSTRING. В некоторых случаях возможно преобразование с использованием других строковых функций SQL. В некоторых случаях объем данных, производительность и версия SQL Server определяют параметры один над другим.

На этом пока все. Надеюсь, вам понравилась эта статья о строковых функциях SQL и, в частности, о функции SQL Server SUBSTRING. Не стесняйтесь задавать любые вопросы в комментариях ниже.

Я технолог по базам данных, имеющий более 11 лет богатого практического опыта работы с технологиями баз данных. Я сертифицированный специалист Microsoft и имею степень магистра компьютерных приложений.

Моя специальность заключается в разработке и внедрении решений высокой доступности и кроссплатформенной миграции БД.В настоящее время разрабатываются технологии SQL Server, PowerShell, Oracle и MongoDB.

Посмотреть все сообщения от Prashanth Jayaram

Последние сообщения от Prashanth Jayaram (посмотреть все)

.

sql server — SQL-запрос для выбора строки между двумя известными строками

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *