Регулярные выражения sql like: LIKE REGEXP_LIKE Oracle SQL, % _,

Содержание

Использование ‘LIKE’ и ‘REGEXP’ в запросе SQL

Я пытаюсь использовать некоторые regex в выражении, где у меня есть два условия в предложении WHERE . Шаблон, который я хочу захватить, — это 106, за которым следует любая цифра, за которой следует цифра, которая должна быть либо 3, либо 4, то есть 106[0-9][3-4]

Во-первых, я попробовал это:

SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND (ForestID REGEXP '106[0-9][3-4]') 

Это привело к ошибке, как показано ниже, и было бы хорошо знать, почему.

Msg 102, Level 15, State 1, Line 16
Incorrect syntax near 'REGEXP'.

Затем я попробовал это, которое сейчас работает, но я не уверен, делает ли это то, что я хочу.

SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND (ForestID LIKE '106[0-9][3-4]') 

Будет ли это так, как я описал выше?

sql

sql-server

regex

Поделиться

Источник


Kaleb    

25 января 2017 в 10:55

3 ответа


  • Yii2 REGEXP в запросе MySQL

    Как я могу использовать запрос SQL, подобный следующему в yii2? select * from Skill_Names where SkillName REGEXP ‘PHP|MYSQL’ Я не хочу что-то вроде ( SkillName Like %PHP% or SkillName Like %MYSQL% ) , так как мне нужно использовать REGEXP.

  • Использование LIKE в запросе sql

    В запросе, в котором я ищу результаты, основанные на названии статей, я использую часть LIKE следующим образом: WHERE title LIKE %searchquery% В моей базе данных один заголовок выглядит так: Economy in America Моя проблема: С моим текущим запросом этот заголовок не появляется в списке, когда…



4

Это слишком долго для комментариев. Вы указываете это:

Шаблон, который я хочу захватить, — это 106, за которым следует любая цифра, за которой следует
цифра, которая должна быть либо 3, либо 4, то есть 106[0-9][3-4]

А затем вы приводите пример с использованием регулярного выражения

WHERE ForestID REGEXP '106[0-9][3-4]'

Регулярные выражения соответствуют шаблонам в любом месте строки. Итак, это будет соответствовать '10603' .106[0-9][3-4]$’

Поделиться


Gordon Linoff    

25 января 2017 в 11:51



3

Вам не нужно взаимодействовать с управляемым кодом, так как вы можете использовать LIKE :

SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND ForestID LIKE '106[0-9][3-4]')

чтобы внести ясность: SQL Server не поддерживает регулярные выражения без управляемого кода. В зависимости от ситуации оператор LIKE может быть вариантом, но ему не хватает гибкости, которую обеспечивают регулярные выражения.

Если вы хотите иметь полную функциональность регулярных выражений, попробуйте это .

Поделиться


LS_85    

25 января 2017 в 11:30



0

Попробуйте Ниже

SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND ((ForestID LIKE '%106_3%' OR ForestID LIKE '%106_4%'))

Поделиться


ruchit    

25 января 2017 в 12:11


  • Использование оператора «like» в запросе MySQL, включающем переменную ColdFusion

    Я создаю страницу related resources, которая ищет в нашей библиотеке документы, имеющие отношение к конкретному самолету. Если посетитель исследует XV-1, я хочу найти все статьи, содержащие обозначение XV-1 в названии. Но я не хочу, чтобы найти какие-либо документы на XV-15. Обозначение…

  • конвертировать REGEXP для LIKE в запросе MYSQL

    У меня есть запрос MYSQL, который выглядит следующим образом select * from table1 where host REGEXP ‘host1’; Я хочу выполнить тот же запрос с помощью LIKE пожалуйста, подскажите, как это можно сделать


Похожие вопросы:

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

SELECT MAX(sm_version) AS version_latest, user_type AS role_performed FROM usage_database WHERE user_id LIKE ( ‘+%eid_upper+’ ) OR user_id LIKE ( ‘+eid_lower+’ ) GROUP BY user_type Это мой вопрос. Я…

как использовать REGEXP в запросе sql

У меня есть столбец в моей таблице под названием to_user , содержание которого выглядит следующим образом: id to_user 1. 1+2+3 2. 1 мой вопрос select * from notifications where (type = 4 and to_user…

SQL риск инъекции-разрешить ввод REGEXP

Я рассматриваю возможность разрешить пользователям вставлять свой собственный шаблон REGEXP, который будет использоваться в запросе Mysql. Я хорошо осведомлен о рисках инъекции sql и знаю, что нет…

Yii2 REGEXP в запросе MySQL

Как я могу использовать запрос SQL, подобный следующему в yii2? select * from Skill_Names where SkillName REGEXP ‘PHP|MYSQL’ Я не хочу что-то вроде ( SkillName Like %PHP% or SkillName Like %MYSQL% )…

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

В запросе, в котором я ищу результаты, основанные на названии статей, я использую часть LIKE следующим образом: WHERE title LIKE %searchquery% В моей базе данных один заголовок выглядит так: Economy…

Использование оператора «like» в запросе MySQL, включающем переменную ColdFusion

Я создаю страницу related resources, которая ищет в нашей библиотеке документы, имеющие отношение к конкретному самолету. Если посетитель исследует XV-1, я хочу найти все статьи, содержащие…

конвертировать REGEXP для LIKE в запросе MYSQL

У меня есть запрос MYSQL, который выглядит следующим образом select * from table1 where host REGEXP ‘host1’; Я хочу выполнить тот же запрос с помощью LIKE пожалуйста, подскажите, как это можно…

Есть ли способ dplyr использовать REGEXP в запросе базы данных?

Когда я запрашиваю базу данных с помощью dplyr, мне часто приходится искать строки. Обычно я использую %like% , который работает достаточно. Хотя иногда я предпочитаю использовать регулярные…

Использование Pyodbc с сервером SQL, функция regexp не распознается

Я использую Pyodbc для извлечения с сервера Microsoft SQL. Функция REGEXP в запросе SQL не распознается. Я не сильный пользователь SQL, но это кажется довольно прямолинейным, я пробовал много разных…

Как использовать LIKE в запросе SQL (SAP B1)?

Как я могу использовать LIKE в запросе SQL, например Select T0.[U_Tds] FROM HEM1 T0 where T0.[toDate] LIKE ‘%YEAR($[HEM1.toDate])’ Извините, у меня есть пользовательское поле взятых дней(U_Tds),…

Поиск текста с помощью регулярных выражений — SQL Server Management Studio (SSMS)

Буква в верхнем регистреUppercase letter:Lu:LuСовпадает с любой буквой в верхнем регистре.Matches any one upper case letter. Например, «:Luнига» совпадает со строкой «Книга», но не «книга».For example, :Luhe matches «The» but not «the».
Буква в нижнем регистреLowercase letter:Ll:LlСовпадает с одной прописной буквой.Matches any one lower case letter. Например, «:Llнига», наоборот, совпадает со строкой «книга», но не «Книга».For example, :Llhe matches «the» but not «The».
Заглавная букваTitle case letter:Lt:LtСовпадает со строкой из одной заглавной и одной прописной буквы, например «Нж» или «Дз».Matches characters that combine an uppercase letter with a lowercase letter, such as Nj and Dz.
Буква-модификаторModifier letter:Lm:LmСовпадает со знаками пунктуации, например запятыми, знаками ударений, двойными штрихами, используемыми для обозначения модификации предыдущей буквы.Matches letters or punctuation, such as commas, cross accents, and double prime, used to indicate modifications to the preceding letter.
Другая букваOther letter:Lo:LoСовпадает с другими буквами, например готическая буква «asha».Matches other letters, such as gothic letter ahsa.
Десятичная цифраDecimal digit:Nd:NdСовпадает с десятичными цифрами от 0 до 9 и их эквивалентами полной ширины.Matches decimal digits such as 0-9 and their full-width equivalents.
Цифра, обозначаемая буквойLetter digit:Nl:NlСовпадает с цифрами, обозначаемыми при помощи букв (например римские цифры или идеографический ноль).Matches letter digits such as roman numerals and ideographic number zero.
Другая цифраOther digit:No:NoСовпадает с другими цифрами, например старая курсивная единица.Matches other digits such as old italic number one.
Открывающая пунктуацияOpen punctuation:Ps:PsСовпадает с открывающей пунктуацией, например открывающиеся круглые или фигурные скобки.Matches opening punctuation such as open brackets and braces.
Закрывающая пунктуацияClose punctuation:Pe:PeСовпадает с закрывающей пунктуацией, например закрывающиеся круглые или фигурные скобки.Matches closing punctuation such as closing brackets and braces.
Открывающие кавычкиInitial quote punctuation:Pi:PiСовпадает со знаком открывающих двойных кавычек.Matches initial double quotation marks.
Закрывающие кавычкиFinal quote punctuation:Pf:PfСовпадает с одиночными кавычками или знаком закрывающих двойных кавычек.Matches single quotation marks and ending double quotation marks.
ТиреDash punctuation:Pd:PdСовпадает со знаком тире.Matches the dash mark.
Соединительная пунктуацияConnector punctuation:Pc:PcСовпадает с символом подчеркивания или знаком выделения подчеркиванием.Matches the underscore or underline mark.
Другая пунктуацияOther punctuation:Po:PoСовпадает с (,), ?, «, !, @, #, %, &, *, \, (:), (;), ‘, and /.Matches (,), ?, «, !, @, #, %, &, *, \, (:), (;), ‘, and /.
ПробелSpace separator:Zs:ZsСовпадает с пробелами.Matches blanks.
Разделитель строкLine separator:Zl:ZlСоответствует символу Юникода U+2028.Matches the Unicode character U+2028.
Разделитель абзацевParagraph separator:Zp:ZpСоответствует символу Юникода U+2029.Matches the Unicode character U+2029.
Знак, отличный от пробельногоNon-spacing mark:Mn:MnСовпадает со всеми знаками, отличными от пробельных.Matches non-spacing marks.
Объединяющий знакCombining mark:Mc:McСовпадает с объединяющими знаками.Matches combining marks.
Закрывающий знакEnclosing mark:Me:MeСовпадает с закрывающими знаками.Matches enclosing marks.
Математический символMath symbol:Sm:SmСовпадает со знаками +, =, ~, |, <, and >.Matches +, =, ~, |, <, and >.
Символ валютCurrency symbol:Sc:ScСовпадает со знаком $ и остальными символами валют.Matches $ and other currency symbols.
Символ-модификаторModifier symbol:Sk:SkСовпадает с символами-модификаторами, например двойным, одинарным диакритическим ударением и знаком долготы над гласными.Matches modifier symbols such as circumflex accent, grave accent, and macron.
Другие символыOther symbol:So:SoСовпадает с другими символами, например знаком авторских прав, знаком абзаца и знаком градуса.Matches other symbols, such as the copyright sign, the pilcrow sign, and the degree sign.
Другие управляющие символыOther control:Cc:CcСовпадает с концом строки.Matches end of line.
Другие символы форматированияOther format:Cf:CfСовпадает с управляющими символами форматирования, например двунаправленными управляющими символами.Formatting control character such as the bi-directional control characters.
СуррогатSurrogate:Cs:CsСовпадает с половиной суррогатной пары.Matches one half of a surrogate pair.
Символы личного пользованияOther private-use:Co:CoСовпадает с символами из индивидуальной области.Matches any character from the private-use area.
Другие не присвоенные символыOther not assigned:Cn:CnСимволы, не имеющие соответствия символам Юникода.Matches characters that do not map to a Unicode character.
Определяет количество вхождений предыдущего символа или группы.Specify the number of occurrences of the preceding character or group. Дополнительные сведения см. в разделе Совпадение ровно n раз: {n}.For more information, see Match exactly n times.{n}, где n обозначает число вхождений.{n}, where ‘n’ is the number of occurrencesx(ab){2}x совпадает с «xababx»x(ab){2}x matches «xababx»
x(ab){2,3}x совпадает с «xababx» и «xabababx», но не «xababababx»x(ab){2,3}x matches «xababx» and «xabababx» but not «xababababx»

поиск на основе регулярных выражений

Описание: в этой статье вы узнаете, как использовать оператор REGEXP в MySQL для выполнения сложного поиска на основе регулярных выражений.

 

Введение в регулярные выражения

Регулярное выражение – это специальная строка, которая описывает шаблон поиска. Это мощный инструмент, который дает вам краткий и гибкий способ определения строк текста, например символов и слов, на основе шаблонов.

Например, вы можете использовать регулярные выражения для поиска электронной почты, IP-адреса, номера телефона, номера социального страхования или какого-либо определенного шаблона.

Регулярное выражение использует собственный синтаксис, который может интерпретироваться процессором регулярных выражений. Регулярные выражения широко используются практически на всех платформах, от языков программирования до баз данных, включая MySQL.

Преимущество использования регулярного выражения заключается в том, что вы не ограничены поиском строки на основе фиксированного шаблона со знаком процента (%) и подчеркиванием (_) в операторе LIKE. Регулярные выражения имеют больше метасимволов для создания гибких шаблонов.

Недостаток использования регулярных выражений заключается в том, что довольно сложно понять и поддерживать такой сложный шаблон. Поэтому вы должны описать значение регулярного выражения в комментарии к оператору SQL. Кроме того, скорость извлечения данных в некоторых случаях уменьшается, если вы используете сложные шаблоны в регулярном выражении.

Сокращением регулярных выражений является regex или regexp

 

Оператор REGEXP в MySQL

MySQL адаптирует регулярное выражение, реализованное Генри Спенсером. MySQL позволяет сопоставить шаблон прямо в операторах SQL с помощью оператора REGEXP.

Следующее иллюстрирует синтаксис оператора REGEXP в предложении  WHERE:

SELECT
column_list
FROM
table_name
WHERE
string_column REGEXP pattern;

 

Этот оператор выполняет сопоставление string_column с шаблоном pattern.

Если значение в string_column совпадает с pattern, выражение в предложении WHERE возвращает true, в противном случае возвращает false.

Если либо string_column либо pattern равен NULL, результат NULL.

Помимо оператора REGEXP вы можете использовать оператор RLIKE, который является синонимом оператора REGEXP..{10}$’;

 

 

 

Из этой статьи вы узнали, как запрашивать данные с помощью оператора REGEXP в MySQL с регулярными выражениями.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Поиск информации в тексте средствами MS SQL Server

Время прочтения: 4 мин.

В своей работе нам часто приходится анализировать текст, изложенный в свободной форме (назначения платежей, комментарии, адреса и др.) с целью вычленить определенную информацию. В excel для этого можно использовать текстовые формулы и регулярные выражения в VBA. Кроме того, регулярные выражения и текстовые функции можно использовать в python и других языках программирования.

Но как быть, если объем информации измеряется миллионами записей в базе данных, а времени на выгрузку и анализ небольших порций данных нет? Использование Transact-SQL (который хоть и не поддерживает регулярные выражения в полной мере, имеет более расширенный функционал оператора like, чем стандартный SQL) позволит переложить вычисления на плечи СУБД и сэкономить время на копировании данных.0-9]%’
and [Номер телефона] not like ‘[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’
)
if @t like ‘[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%’
begin
update [dbo].[banki_ru_messages]
set [Номер телефона]=right([Номер телефона], len([Номер телефона])-12)
where [Номер телефона] =@t
end
else
begin
update [dbo].[banki_ru_messages]
set [Номер телефона]=right([Номер телефона], len([Номер телефона])-1)
where [Номер телефона] =@t
end
end
go

update [dbo].[banki_ru_messages]
set [Номер телефона]=left([Номер телефона], 11)
where [Номер телефона] is not null
go

alter table [dbo].[banki_ru_messages]
alter column [Номер телефона] nvarchar(11)
go

select * from [dbo].[banki_ru_messages]
where [Номер телефона] is not null

Аналогичным способом, изменив количество цифр, можно искать номера счетов, ИНН, почтовые индексы.

Для поиска адресов электронной почты можно воспользоваться следующим кодом:


alter table [dbo].[banki_ru_messages]
add [E-mail] nvarchar(max)
go

update [dbo].[banki_ru_messages]
set [E-mail]=[Сообщение]
where [Сообщение] like '%[A-z0-9]@[A-z0-9]%'
go

declare @t nvarchar(max)
while exists (select top 1 [E-mail] from [dbo].[banki_ru_messages]
			  where [E-mail] is not null and charindex(' ', [E-mail])>0)
begin
	set @t=(select top 1 [E-mail] from [dbo].[banki_ru_messages]
			where [E-mail] is not null	and charindex(' ', [E-mail])>0)
	if left(@t, charindex(' ', @t)-1) like '%[A-z0-9]@[A-z0-9]%'
	begin
		update [dbo].[banki_ru_messages]
		set [E-mail]=left(@t, charindex(' ', @t)-1)
		where [E-mail]=@t
	end
	else
	begin
		update [dbo].[banki_ru_messages]
		set [E-mail]=right(@t, len(@t)-charindex(' ', @t)+1)
		where [E-mail]=@t
	end
end
go


select * from [dbo].[banki_ru_messages]
where [E-mail] is not null	or [ИНН] is not null or [Номер телефона] is not null

Описанные алгоритмы конечно же имеют погрешность (количество подряд идущих цифр не всегда однозначно определяет их суть, да и символ “@” встречается не только в адресах электронной почты), но в определенных ситуациях позволяют сэкономить время и дать представление о наличии и объеме искомой информации в текстовых полях.

sql — Использование LIKE и REGEXP в запросе SQL

Я пытаюсь использовать некоторое выражение в выражении, где у меня есть два условия в предложении WHERE. Шаблон, который я хочу записать, — это 106, за которым следует любая цифра, за которой следует цифра, которая должна быть либо 3, либо 4, т.е. 106[0-9][3-4]

Сначала я попробовал это:

SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND (ForestID REGEXP '106[0-9][3-4]') 

Это привело к ошибке, как показано ниже, и было бы полезно узнать, почему.

Msg 102, Level 15, State 1, Line 16
Incorrect syntax near 'REGEXP'.

Затем я попробовал это, и теперь оно работает, но я не уверен, что он делает то, что я хочу.

SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND (ForestID LIKE '106[0-9][3-4]') 

Будет ли это делать, как я описал выше?

1

Kaleb

25 Янв 2017 в 13:55

3 ответа

Лучший ответ

Вам не нужно взаимодействовать с управляемым кодом, поскольку вы можете использовать LIKE :

SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND ForestID LIKE '106[0-9][3-4]')

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

Если вы хотите иметь полную функциональность регулярных выражений, попробуйте this.

3

LS_85
25 Янв 2017 в 11:33

Это слишком долго для комментария. Вы указываете это:

Шаблон, который я хочу записать, — это 106, за которым следует любая цифра, за которой следует цифра, которая должна быть либо 3, либо 4, т.е. 106 [0-9] [3-4].

И тогда вы даете пример, используя регулярное выражение

WHERE ForestID REGEXP '106[0-9][3-4]'

Регулярные выражения соответствуют шаблонам в любом месте строки.106[0-9][3-4]$’

4

Gordon Linoff
25 Янв 2017 в 11:51

Попробуй ниже

SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND ((ForestID LIKE '%106_3%' OR ForestID LIKE '%106_4%'))

0

ruchit
25 Янв 2017 в 12:11

Поиск и регулярные выражения в MySQL

Поиск и регулярные выражения в MySQL

Базы данных MySQL

СУБД MySQL имеет различные инструменты для осуществления поиска, среди которых оператор LIKE, осуществляющий простейшие операции поиска, оператор RLIKE, предоставляющий возможности поиска по регулярным выражениям.

Оператор LIKE

Оператор LIKE предназначен для сравнения строк с использованием простейших регулярных выражений. Оператор часто используется в конструкции WHERE и возвращает 1 или 0.

Сравнение строк не зависит от регистра, если не используется ключевое слово BINARY, означающее что строку следует рассматривать как двоичную последовательность.

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

«%» — Соответствует любому количеству символов и их отсутствию тоже.

«_» — Соответствует одному символу.

Поиск символов «%» и «_» осуществляется при помощи конструкций «\%» и «\_«.

Пример использования:

select name, family from personal where name like 'A%В_'
//Этим скриптом мы выберем все записи поле name у которых 
//начинается с буквы А и предпоследняя буква этого поля В.

Оператор можно использовать с отрицанием: NOT LIKE.

В этом случае в выборку попадут записи не удовлетворяющие заданным условиям.

Оператор RLIKE

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

Существует несколько диалектов регулярных выражений. В СУБД MySQL реализация ориентирована на соответствие стандарту POSIX.

Регулярное выражение это шаблон применяемый к заданному тексту с лева на право. Например регулярное выражение содержащее обычный текст, например ‘монитор’, соответствует строке содержащей такую подстроку например: ‘мониторинг’, ‘мониторы’, ‘большие мониторы’, и т.п.

Пример:

select NAME from market_cards where NAME RLIKE 'кекс'

Результат работы:
КЕКС К ЧАЮ В АССОРТ. 225ГР.
СУХАЯ СМЕСЬ ДЛЯ КЕКСА АТЛАНТА
МИНИ КЕКСЫ 6ШТ

Из таблицы market_cards будут выбраны все записи где поле NAME содержит слово ‘кекс’ при этом неважно в каком месте строки это слово (или точнее сказать сочетание символов) расположено.кекс$’

Результат работы:
Первый запрос вернйт нам записи типа:
КЕКСЫ МИНИ КОВИС 200ГР.
КЕКС К ЧАЮ ХАРРИС 225ГР.
КЕКСЫ 7 ДНЕЙ МАГДАЛЕН.
Второй и третий запросы ничего не вернут, поскольку не найдут записей оканчивающихся на слово ‘кекс’

Гораздо чаще необходимо привязываться ни к концу или началу строки, а к концу или началу слова.

Такую задачу реализуют последовательности:
[[:<:]] — Начало слова.
[[:>:]] — Конец слова.

Пример:

select NAME from market_cards where NAME RLIKE '[[:<:]]медведь[[:>:]]'

Результат:
ИГРУШКА МЕДВЕДЬ МИТЕНЬКА РЮКЗАК
ИГРУШКА МЕДВЕДЬ МИТЬКА
МЕДВЕДЬ КОРИЧНЕВЫЙ
ИГРУШКА МЕДВЕДЬ МИТЬКА

Ещё один специальный символ:
‘|’ — Аналогичен по смыслу (или), например ‘мама|мать’ — будут выбраны все строки включающие и ‘мама’ и ‘мать’.

В регулярном выражении возможно использование других спецсимволов и классов символов:
[abc] — будут выбраны записи с любым из символов a,b,c.’ — своего рода отрицание).

Для определения специальных последовательностей внутри строк:
‘\t’ — символ табуляции.
‘\f’ — конец файла.
‘\n’ — символ перевода строки.
‘\r’ — символ возврата каретки.
‘\\’ — символ обратного слэша \.

Кроме этого действуют классы символов POSIX регулярных выражений:
[:alnum:] — алфавитно цифровые символы.
[:alpha:] — символы алфавита.
[:blank:] — символы пробела и табуляции.
[:cntrl:] — управляющие символы.
[:digit:] — десятичные цифры (0-9).
[:graph:] — графические (видимые) символы.
[:lower:] — символы алфавита в нижнем регистре.
[:print:] — графические или невидимые символы.
[:punct:] — знаки препинания.
[:space:] — символы пробела, табуляции, новой строки или возврата каретки.
[:upper:] — символы алфавита в верхнем регистре.
[:xdigit:] — шестнадцатеричные цифры.

(Алфавитные символы — могут быть как русскими так и английскими.)

Выражения в квадратных скобках соответствуют только одному символу и часто употребляются с квантификаторами, которые следуют сразу за символом и изменяют количествое его вхождений в строку.
? — символ либо входит в строку один раз, либо вообще в неё не входит.
* — любое число вхождений символа в строку, в том числе и ноль.
+ — одно или более вхождений символа в строку.

Оператор RLIKE можно использовать с отрицанием NOT RLIKE — в этом случае результатом его работы будет выборка строк не соответствующих заданным параметрам.



Регулярные выражения и поиск в MySQL

Поиск информации в тексте средствами MS SQL Server — Разработка на vc.ru

{«id»:210060,»url»:»https:\/\/vc.ru\/dev\/210060-poisk-informacii-v-tekste-sredstvami-ms-sql-server»,»title»:»\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 MS SQL Server»,»services»:{«facebook»:{«url»:»https:\/\/www.facebook.com\/sharer\/sharer.php?u=https:\/\/vc.ru\/dev\/210060-poisk-informacii-v-tekste-sredstvami-ms-sql-server»,»short_name»:»FB»,»title»:»Facebook»,»width»:600,»height»:450},»vkontakte»:{«url»:»https:\/\/vk.com\/share.php?url=https:\/\/vc.ru\/dev\/210060-poisk-informacii-v-tekste-sredstvami-ms-sql-server&title=\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 MS SQL Server»,»short_name»:»VK»,»title»:»\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435″,»width»:600,»height»:450},»twitter»:{«url»:»https:\/\/twitter.com\/intent\/tweet?url=https:\/\/vc.ru\/dev\/210060-poisk-informacii-v-tekste-sredstvami-ms-sql-server&text=\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 MS SQL Server»,»short_name»:»TW»,»title»:»Twitter»,»width»:600,»height»:450},»telegram»:{«url»:»tg:\/\/msg_url?url=https:\/\/vc.ru\/dev\/210060-poisk-informacii-v-tekste-sredstvami-ms-sql-server&text=\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 MS SQL Server»,»short_name»:»TG»,»title»:»Telegram»,»width»:600,»height»:450},»odnoklassniki»:{«url»:»http:\/\/connect.ok.ru\/dk?st.cmd=WidgetSharePreview&service=odnoklassniki&st.shareUrl=https:\/\/vc.ru\/dev\/210060-poisk-informacii-v-tekste-sredstvami-ms-sql-server»,»short_name»:»OK»,»title»:»\u041e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u0438″,»width»:600,»height»:450},»email»:{«url»:»mailto:?subject=\u041f\u043e\u0438\u0441\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 MS SQL Server&body=https:\/\/vc.ru\/dev\/210060-poisk-informacii-v-tekste-sredstvami-ms-sql-server»,»short_name»:»Email»,»title»:»\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043f\u043e\u0447\u0442\u0443″,»width»:600,»height»:450}},»isFavorited»:false}

LIKE Operator и варианты его использования. — {coding} Прицел

Регулярное выражение — это правило, определяющее, как символы могут появляться в выражении. Шаблон поиска определяется последовательностью символов или текста. В базах данных SQL выбор значений на основе регулярных выражений, определенных в условии WHERE, может быть очень полезным. Ниже приведены несколько примеров использования регулярных выражений.

  1. Его можно использовать для идентификации данных, в которых используется комбинация, например номер кредитной или дебетовой карты, адрес электронной почты или номер телефона.
  2. Найдите определенный текстовый образец или примените фильтр к текстовым, числовым или специальным символьным данным.
  3. Его можно использовать для анализа данных в ETL путем создания правил для входящего и исходящего трафика, поиска шаблонов в коде.

В отличие от MySQL и Oracle, база данных SQL Server не поддерживает встроенные функции RegEx. Однако SQL Server предлагает встроенные функции для решения таких сложных проблем. Примеры таких функций: LIKE, PATINDEX, CHARINDEX, SUBSTRING и REPLACE.Мы можем комбинировать эти функции с другими и создавать сложные и более сложные запросы. Эти запросы сложно поддерживать, и для их разработки требуется больше времени и усилий, если мы запрашиваем большую таблицу, чем эти запросы могут иметь огромное влияние на производительность.

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

Оператор LIKE использует комбинацию совпадающего выражения и шаблона. Оператор LIKE поддерживает следующие допустимые символы подстановки.

Подстановочный знак Описание
% Строка из нуля или более символов. Например, Employee_Name% Nisarg% заполнит записи, содержащие слово Nisarg в любом месте строки.
[] Любой одиночный символ в указанном диапазоне.A]% ‘заполнит записи, начинающиеся с Ni и где следующая буква не A.

В этой статье я собираюсь продемонстрировать следующие варианты использования оператора LIKE.

Подготовка демонстрационной установки

Сначала создайте демонстрационную таблицу с именем « Patient_Addresses. ”Для этого выполните следующий запрос:

 ИСПОЛЬЗОВАТЬ БАЗУ ДЕМОДАННЫХ
ИДТИ

СОЗДАТЬ ТАБЛИЦУ Patient_Addresses
(
ID INT IDENTITY (1, 1),
ТЕКСТДАННЫЕ NVARCHAR (МАКС.)
) 

Теперь выполните следующий запрос, чтобы вставить данные в «Patient_Addresses».

 USE [база демоданных]
ИДТИ
INSERT [dbo]. [Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'KALOLI GAM TA-KHEDA DIST- KHEDA ')
ИДТИ
INSERT [dbo]. [Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'PATHAR KUVA RELIEF ROADA''BAD ')
ИДТИ
INSERT [dbo]. [Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'TARA APPTS, GURUKUL ROAD AHMEDABAD ')
ИДТИ
INSERT [dbo]. [Patient_Addresses] ([Address]) VALUES (N'1278, HOJAVALIGALI GOMATIPUR A`BD ')
ИДТИ
INSERT [dbo]. [Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'DHOLKA ')
ИДТИ
ВСТАВИТЬ [dbo].[Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'KHODIYAR NAGAR BEHRAMPURA A, BAD ')
ИДТИ
ВСТАВИТЬ [dbo]. [Адреса_ пациентов] ([Адрес]) ЗНАЧЕНИЯ (N'2 / 27 ASHPURI SOC. GHODASAR A`BD ')
ИДТИ
INSERT [dbo]. [Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'GHEE KANTA ')
ИДТИ
ВСТАВИТЬ [dbo]. [Patient_Addresses] ([Address]) ЗНАЧЕНИЯ
(N'GAM; BODIYA TALUKO; LIMADI DIST; SURENDRANAGR ')
ИДТИ
INSERT [dbo]. [Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'ELISE BRIDGE ')
ИДТИ
INSERT [dbo]. [Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'GJ ')
ИДТИ
ВСТАВИТЬ [dbo].[Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'MP ')
ИДТИ
INSERT [dbo]. [Patient_Addresses] ([Address]) ЗНАЧЕНИЯ (N'Q ')
GO 

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

 ИСПОЛЬЗОВАТЬ БАЗУ ДЕМОДАННЫХ
ИДТИ

ВЫБРАТЬ *
ОТ [PATIENT_ADDRESSES] 

Данные должны выглядеть следующим образом.

Теперь позвольте мне объяснить варианты использования.

Пример 1:

Например, я хочу заполнить только те строки, которые начинаются с PA.Чтобы заполнить данные, мы можем использовать регулярное выражение «[XY]%». Для этого выполните следующий запрос.

 ВЫБРАТЬ *
ОТ PATIENT_ADDRESSES
ГДЕ АДРЕС КАК "[PA]%" 

Ниже приводится результат

.

Как вы можете видеть на изображении выше, запрос извлекает только запись, в которой значение столбца адреса начинается с «PA»

Пример 2:

Например, я хочу заполнить только записи, которые начинаются только с двух символов.Первый символ должен быть «E», а второй — «L.» Для этого выполните следующий запрос

 ВЫБРАТЬ *
ОТ PATIENT_ADDRESSES
ГДЕ АДРЕС КАК '[E] [L]%' 

Ниже приводится результат:

Как вы можете видеть на изображении выше, запрос получил только запись, в которой значение столбца адреса имеет «E» в качестве первого символа и «L» в качестве второго символа.

Пример 3

Например, мы хотим получить только те строки, которые содержат два символа, и эти символы должны быть от A до Z, поэтому запрос должен быть записан в следующей структуре:

 База демоданных USE
идти

ВЫБРАТЬ *
ОТ [адреса_больных]
ГДЕ адрес LIKE '[A-Z] [A-Z]' 

Ниже приводится результат.

Как видно из изображения выше, запрос возвращает данные, которые содержат ровно два символа, а значения обоих символов находятся в диапазоне от A до Z.

Пример 4

Теперь мы хотим получить данные, где первый символ будет между K и P, а остальная часть строки будет такой же. Чтобы получить такой формат, используйте следующую структуру.

 ИСПОЛЬЗОВАТЬ БАЗУ ДЕМОДАННЫХ
ИДТИ

ВЫБРАТЬ *
ОТ [PATIENT_ADDRESSES]
ГДЕ АДРЕС КАК "[K-P]%" 

Ниже приводится результат:

Точно так же мы можем получить данные, в которых последние три символа будут «ПЛОХО», и за исключением этих символов, строка останется прежней.Для этого выполните следующий запрос.

 База демоданных USE
идти

ВЫБРАТЬ *
ОТ [адреса_больных]
ГДЕ адрес, КАК "% BAD" 

Пример 5

Например, мы хотим получить список адресов, где первый символ строки должен находиться между E и H, а оставшаяся строка должна оставаться такой же. Для этого мы будем использовать регулярное выражение [X-Y]%. Выполните следующий запрос:

 ВЫБРАТЬ *
ОТ [PATIENT_ADDRESSES]
ГДЕ АДРЕС КАК "[E-H]%" 

Ниже приводится результат.

Точно так же мы можем получить список адресов, где последний символ адресного столбца должен находиться между A и C, а оставшаяся строка должна оставаться такой же. Для этого мы будем использовать регулярное выражение% [X-Y]. Выполните следующий запрос

 ВЫБРАТЬ *
ОТ PATIENT_ADDRESSES
ГДЕ АДРЕС КАК "% [A-C]" 

Ниже приводится результат.

Теперь давайте посмотрим на несколько сложных примеров.

Пример 6

Мы хотим заполнить записи из адресной таблицы, где последний символ не должен находиться между B и D.А-Я]% ‘

Ниже приводится результат

.

Найти конкретный образец строки

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

  1. Сначала разрешены любые символы (первый%),
  2. Третий символ должен быть I или S,
  3. Четвертый и пятый символ будут SE. Эти символы статичны.
  4. Пятый символ будет пробелом.
  5. И после этого разрешен любой символ (последний%).

Чтобы заполнить запись, выполните следующий запрос.

 ВЫБРАТЬ *
ОТ [адреса_больных]
ГДЕ адрес КАК '% [IS] SE []%' 

Ниже приводится результат.

Сводка

В этой статье я рассмотрел:

  1. Что такое регулярное выражение?
  2. Обзор операторов LIKE и того, как мы можем использовать его в качестве регулярного выражения.
  3. Различные варианты использования оператора LIKE.

Nisarg — администратор баз данных SQL Server и сертифицированный специалист Microsoft, имеющий более 5 лет опыта в администрировании SQL Server и 2 года в администрировании баз данных Oracle 10g. Он имеет опыт проектирования баз данных, настройки производительности, резервного копирования и восстановления, настройки высокой доступности и аварийного восстановления, миграции и обновления баз данных. Он получил степень бакалавра информационных технологий Университета Ганпат.

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

Как использовать Regex в SQL

Последнее изменение: 5 апреля 2021 г. c% кот, машина, цепь | Чередование (любой из двух вариантов) с (а | о)% банка кукуруза коп () Сгруппировать элементы в один логический элемент с (а | о)% банка кукуруза коп _ Любой одиночный символ (с использованием LIKE и SIMILAR TO) c_ co, fico, pico% Любая строка (с использованием LIKE и SIMILAR TO) c% диаграмма, шарнирное соединение, ящик. Любой одиночный символ (с использованием POSIX) г. co, fico, pico. * Любая строка (с использованием POSIX) г. * диаграмма, шарнирное соединение, ящик + Повторение предыдущего пункта один или несколько раз co + круто, круто

Компараторы

Есть три способа использовать сравнения регулярных выражений в SQL:

  • КАК
  • ПОДОБНО
  • Компараторы POSIX

LIKE и SIMILAR TO используются для базовых сравнений, когда вы ищете соответствующую строку.LIKE и SIMILAR TO просматривают и сравнивают строковые шаблоны, с той лишь разницей, что SIMILAR TO использует определение SQL99 для регулярных выражений, а LIKE использует определение PSQL для регулярных выражений.

Синтаксис : [Имя строки или столбца] КАК / ПОДОБНО [Регулярное выражение]

Выражение Возвращает
«char» КАК «char» Истинно
«char» КАК «c%» Истинно
«char» КАК «ха» Истинно
«char» КАК «c» Ложь
«char» ПОДОБНО «char» Истинно
‘char’ ПОДОБНО ‘% (h | g)%’ Истинно
‘char’ ПОДОБНО ‘h’ Ложь
«char» ПОДОБНО «(a | b)%» Ложь

В отличие от LIKE и SIMILAR TO, POSIX не является ключевым словом, которое используется в запросе SQL.POSIX — это набор компараторов для совпадения регистра и неэквивалентности. Это самый мощный способ использования Regex в SQL. Regex не использует = и! = Для сравнения, а использует эти компараторы POSIX:

  1. ~ : с учетом регистра, сравнивает два оператора, возвращает истину, если первая строка содержится во втором
  2. ~ * : без учета регистра, сравнивает два оператора, возвращает истину, если первая строка содержится во втором
  3. ! ~ : с учетом регистра, сравнивает два оператора, возвращает false, если первая строка содержится во втором
  4. ! ~ * : без учета регистра, сравнивает два оператора, возвращает false, если первая строка содержится во втором

Синтаксис : [Имя строки или столбца] [POSIX] [Регулярное выражение]

Эти компараторы могут использоваться в запросах для поиска или исключения определенных данных из возвращаемых.

Примеры регулярных выражений в SQL-запросах

Если вы хотите найти в столбце базы данных все записи, содержащие слово «огонь», вы можете использовать ~ * «огонь», чтобы найти любую строку, содержащую слово:

  SELECT (имя столбца)
ОТ (название таблицы)
ГДЕ (имя столбца) ~ * 'огонь';
  

Чтобы получить все записи, начинающиеся со слова «Пожар»:

  SELECT (имя столбца)
ОТ (название таблицы)
ГДЕ (имя столбца) ~ * '^ fire';
  

Полный список регулярных выражений можно найти по адресу: RexEgg

Сводка

  • Регулярные выражения используют шаблоны для сопоставления строк.
  • Regex позволяет запрашивать базы данных для поиска меньшего подмножества данных.
  • Компараторы POSIX:
  • ~ : с учетом регистра, сравнивает два оператора, возвращает истину, если первое содержится во втором
  • ~ * : без учета регистра, сравнивает два оператора, возвращает истину, если первое содержится во втором
  • ! ~ : с учетом регистра, сравнивает два оператора, возвращает false, если первое содержится во втором
  • ! ~ * : без учета регистра, сравнивает два оператора, возвращает false, если первое содержится во втором

Список литературы

https: // lerner.co.il/2016/03/01/regexps-in-postgresql/
https://www.rexegg.com/regex-quickstart.html

Написано:

Блейк Барнхилл

Проверено:

Мэтт Дэвид
,

Мэтью Лэйн

Обзор оператора SQL LIKE

В этой статье мы узнаем, как использовать оператор SQL LIKE в SQL Server, используя регулярные выражения для поиска и / или управления текстом.Мы начнем с изучения символов и базового синтаксиса использования регулярных выражений с подстановочными знаками. Мы будем использовать наборы символов и выражения повторения для создания гибких шаблонов сопоставления, и попутно изучим различные способы использования оператора LIKE. И, наконец, в последней части раздела мы рассмотрим некоторые из наиболее распространенных и наиболее полезных примеров регулярных выражений.

SQL — наиболее часто используемый язык для работы с базами данных. Когда вы разрабатываете отчет, используете бизнес-аналитику или какой-либо инструмент отчетности, программное обеспечение почти наверняка незаметно создает SQL-запрос, который выполняется в базе данных и возвращает выбранные вами данные.Когда мы ищем конкретные данные или данные, соответствующие определенным критериям, предложение where предоставляет необходимый набор инструментов. Это дает возможность запрашивать определенные строки, которые мы ищем, а не всю таблицу.

Предварительные требования

Загрузите базу данных AdventureWorks2014 здесь, чтобы протестировать следующие образцы T-SQL.

Начало работы

Давайте пройдемся по операторам SQL, используя ключевое слово LIKE и символы подстановки.Итак, приступим к изучению оператора SQL LIKE.

Использование символов подстановки SQL LIKE

Регулярные выражения — это шаблоны для описания сопоставления строк в предложении WHERE. Многие языки программирования поддерживают регулярные выражения, синтаксис которых немного отличается от синтаксиса оператора LIKE. В этой статье, когда мы говорим о регулярных выражениях, мы имеем в виду шаблоны, используемые с оператором SQL LIKE.

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

Подстановочные знаки

Описание

%

Любая строка, содержащая ноль или более символов в шаблоне поиска.]

Поиск по одному символу за пределами указанного диапазона

Использование SQL LIKE с подстановочным знаком «%»

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

ВЫБРАТЬ ТОП 10 *

ОТ Person.Person

WHERE firstname LIKE ‘A%’;

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

Использование SQL LIKE с подстановочным знаком «_»

Подстановочный знак, подчеркивание, соответствует любому одиночному символу. Следующая инструкция SQL находит все телефонные номера, код зоны которых начинается с 7 и заканчивается на 8 в столбце номер телефона . Мы также добавили подстановочный знак% в конце шаблона поиска, поскольку нас не интересуют остальные строковые значения.

ВЫБРАТЬ стр.FirstName,

p.LastName,

PhoneNumber

FROM Person.PersonPhone AS ph

INNER JOIN Person.Person AS p ON ph.BusinessEntityID = p.BusinessEntityID

ГДЕ тел. ПО p.LastName;

Выходные данные показывают, что указаны коды регионов, которые начинаются с 7 и заканчиваются на 8.

Использование SQL LIKE с подстановочными знаками []

Квадратные скобки e.g [] позволяют нам идентифицировать несколько одиночных символов, которые будут в этой конкретной позиции. Например, скажем, чтобы перечислить все строки, в которых первые имена третьего символа начинаются с I или K. Вместо написания нескольких условий LIKE мы можем поместить набор сопоставления с образцом в третью позицию и закрыть его в квадрате. Механизм запросов сначала ищет «I», а затем — «K».

Давайте выполним следующий оператор SQL

ВЫБРАТЬ стр.FirstName,

p.LastName,

PhoneNumber

FROM Person.PersonPhone AS ph

INNER JOIN Person.Person AS p ON ph.BusinessEntityID = p.BusinessEntityID

ГДЕ тел. фамилия как «Ba [ik]%»

ЗАКАЗАТЬ ПО p.LastName;

Вышеупомянутый запрос можно переписать с помощью условия ИЛИ. Это больше похоже на условие ИЛИ.

ВЫБРАТЬ стр.FirstName,

p.LastName,

PhoneNumber

FROM Person.PersonPhone AS ph

INNER JOIN Person.Person AS p ON ph.BusinessEntityID = p.BusinessEntityID

ГДЕ тел. .lastname, например «Bai%» или p.lastname, например, «Bak%»)

ЗАКАЗАТЬ ПО p.LastName;

На выходе мы видим, что перечислены фамилии, в которых третий символ — «I» или «k».»

Следующий оператор SQL отображает все строки, в которых нет буквы, начинающейся с A – D, в первом символе их фамилии.a-d]% ‘

ЗАКАЗАТЬ ПО p.lastname;

Теперь, если я выполню вышеуказанный запрос, мы увидим, что все возвращаемые имена не содержат A, B, C или D в качестве первого символа.

Использование SQL NOT LIKE с подстановочными знаками []

Следующий оператор SQL находит всех лиц, у которых столбец имени содержит более 3 символов.

ВЫБРАТЬ DISTINCT

имя

ОТ Лицо.Человек

ГДЕ имя НЕ НРАВИТСЯ ‘[a-z] [a-z] [a-z]’;

В выводе перечислены только те имена, у которых длина имени больше 3

Использование SQL LIKE с предложением ESCAPE

В следующем операторе SQL предложение ESCAPE используется для экранирования символа «!», Чтобы отрицать значение «%», чтобы найти строку «100% Free» в столбце col1 временной таблицы.

ТАБЛИЦА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ темп;

CREATE TABLE temp (col1 VARCHAR (100));

GO

INSERT INTO temp

VALUES («ApexSQL Refactor — это 100% бесплатный инструмент для форматирования SQL»), («Задание ApexSQL только сегодня со скидкой 10-15%»);

GO

SELECT *

FROM TEMP;

SELECT *

FROM temp

WHERE col1 LIKE ‘% 100!% Free%’ ESCAPE ‘!’;

ГО

В выводе перечислены только те значения, для которых шаблон поиска «100% Free» соответствует выражению col1.

Использование SQL LIKE с оператором CASE

Следующий оператор SQL извлекает всех сотрудников, у которых номера телефонов имеют формат из трех-трех-четырех цифр с дефисами между ними ( 999-999-9999 ). Затем образец сравнивается со столбцом телефонного номера для получения внутренней или международной категории.

Выражение case оценивается для конкретного шаблона, чтобы получить тип категории телефона.

ВЫБРАТЬ p.FirstName,

p.LastName,

PhoneNumber,

CASE WHEN ph.PhoneNumber LIKE ‘[0-9] [0-9] [0-9] — [0-9] [0- 9] [0-9] — [0-9] [0-9] [0-9] [0-9] ‘затем «Внутренний номер телефона»

ELSE «Международный номер телефона»

КОНЕЦ Номер телефона

ОТ Person.PersonPhone AS тел.

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Person.Person AS p ON тел. BusinessEntityID = p.BusinessEntityID

ЗАКАЗАТЬ ПО p.LastName;

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

Использование SQL LIKE с динамическим SQL

Следующий оператор SQL возвращает всех сотрудников, у которых фамилия совпадает с шаблоном Barb. Шаблон создается динамически и сравнивается с выражением.

DECLARE @ELastName VARCHAR (20) = ‘Барб’;

ВЫБРАТЬ п. Имя,

п.LastName,

a.City

ОТ Person.Person p

JOIN Person.Address a ON p.BusinessEntityID = a.AddressID

ГДЕ p.LastName LIKE ‘%’ + @ ELastName + ‘%’;

В выходном списке совпадают строки для указанного шаблона Barb

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

В следующем операторе SQL поле @eLastName имеет тип данных char. Вы можете увидеть использование функции RTRIM для обрезки конечных пробелов.

DECLARE @ELastName CHAR (20) = ‘Барб’;

SELECT p.FirstName,

p.LastName,

a.City

FROM Person.Person p

JOIN Person.Address a ON p.BusinessEntityID = a.AddressID

WHERE p.Фамилия LIKE ‘%’ + RTRIM (@ELastName) + ‘%’;

Использование SQL Like с оператором IF

В следующем операторе SQL входное значение оценивается для конкретного шаблона в предложении условия с помощью оператора IF.

DECLARE @RuleName NVARCHAR (MAX) = ‘SQL Sever 2019 CTP доступен для предварительного просмотра’;

IF @RuleName LIKE ‘SQL Sever [0-9]% CTP доступен для предварительного просмотра’

PRINT ‘valid input good!’;

ELSE

PRINT «недействительный товар!»;

Входная строка оценивается для определенных шаблонов с использованием SQL, такого как выражение с подстановочными знаками, и возвращает допустимую входную строку.], которые доступны с оператором SQL LIKE. Это отличный метод поиска для сопоставления строки символов с указанными шаблонами или там, где мы не совсем уверены в том, что вы ищете, то есть нечеткий поиск. Доступные подстановочные знаки делают оператор LIKE более гибким. Надеюсь, вам понравилась эта статья об операторе SQL LIKE в SQL Server. Не стесняйтесь задавать любые вопросы в комментариях ниже.

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

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

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

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

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

Вам нужно будет создать процедуру CLR, обеспечивающую функциональность регулярного выражения, как показано в этой статье.

Их пример функции использует VB.NET:

  Система импорта
Импортирует System.Data.Sql
Импортирует Microsoft.SqlServer.Server
Импортирует System.Data.SqlTypes
Импортирует System.Runtime.InteropServices
Импортирует System.Text.RegularExpressions
Imports System.Collections 'интерфейс IEnumerable находится здесь


Пространство имен SimpleTalk.Phil.Factor
    Открытый класс RegularExpressionFunctions
        'Функция RegExIsMatch
         _
        Общедоступная общая функция RegExIsMatch (_
                                            Шаблон ByVal как SqlString, _
                                            Вход ByVal как SqlString, _
                                            Параметры ByVal как SqlInt32) как SqlBoolean
            Если (input.IsNull OrElse pattern.IsNull) Тогда
                Вернуть SqlBoolean.False
            Конец, если
            Dim RegExOption как новый System.Text.RegularExpressions.RegExOptions
            RegExOption = Параметры
            Вернуть RegEx.IsMatch (input.Value, pattern.Value, RegExOption)
        Конечная функция
    Конец класса '
Конец пространства имен
  

… и устанавливается в SQL Server с использованием следующего SQL (заменяя переменные с разделителями «%» их фактическими эквивалентами:

  sp_configure 'clr enabled', 1
ПЕРЕКОНФИГУРАЦИЯ С ПЕРЕОПРЕДЕЛЕНИЕМ

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1
            ОТ sys.объекты
            ГДЕ object_id = OBJECT_ID (N'dbo.RegExIsMatch '))
   ФУНКЦИЯ УДАЛЕНИЯ dbo.RegExIsMatch
идти

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1
            ИЗ sys.assemblies asms
            ГДЕ asms.name = N'RegExFunction ')
   УДАЛЕНИЕ СБОРКИ [RegExFunction]

СОЗДАТЬ СБОРКУ RegExFunction
           ИЗ ФАЙЛА%'
ИДТИ

СОЗДАТЬ ФУНКЦИЮ RegExIsMatch
   (
    @Pattern NVARCHAR (4000),
    @ Входной NVARCHAR (МАКС),
    @Options int
   )
ВОЗВРАТ БИТ
КАК ВНЕШНЕЕ НАЗВАНИЕ
   RegExFunction. [SimpleTalk.Phil.Factor.(?: 4 [0-9] {12} (?: [0-9] {3})? | 5 [1-5] [0-9] {14} | 6 (?: 011 | 5 [0 -9] [0-9]) [0-9] {12} | 3 [47] [0-9] {13} | 3 (?: 0 [0-5] | [68] [0-9] ) [0-9] {11} | (?: 2131 | 1800 | 35 \ d {3}) \ d {11}) $ ',' 4241825283987487 ', 1)
- есть ли в этой строке число
ВЫБЕРИТЕ dbo.RegExIsMatch ('\ d', 'есть 1 вещь, которую я ненавижу', 1)
--Проверяет число Возвращает 1
ОБЪЯВИТЬ @pattern VARCHAR (255)
ВЫБЕРИТЕ @pattern = '[a-zA-Z0-9] \ d {2} [a-zA-Z0-9] (- \ d {3}) {2} [A-Za-z0-9]'
ВЫБЕРИТЕ dbo.RegExIsMatch (@pattern, '1298-673-4192', 1),
        dbo.RegExIsMatch (@ pattern, 'A08Z-931-468A', 1),
        dbo.RegExIsMatch (@pattern, '[A90-123-129X', 1),
        dbo.RegExIsMatch (@ pattern, '12345-KKA-1230', 1),
        dbo.RegExIsMatch (@ шаблон, '0919-2893-1256', 1)
  

Регулярные выражения MYSQL (REGEXP) с синтаксисом и примерами

Что такое регулярные выражения?

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

Базовый синтаксис

Базовый синтаксис регулярного выражения выглядит следующим образом:

 Операторы SELECT ... WHERE fieldname REGEXP 'pattern'; 

ЗДЕСЬ —

  • «Операторы SELECT …» — это стандартный оператор SELECT
  • «WHERE fieldname» — это имя столбца, для которого должно выполняться регулярное выражение.
  • «REGEXP ‘шаблон’» REGEXP — это оператор регулярного выражения, а «шаблон» представляет шаблон, который должен соответствовать REGEXP. RLIKE является синонимом для REGEXP и дает те же результаты, что и REGEXP. Чтобы не путать его с оператором LIKE, лучше использовать REGEXP .

Давайте теперь посмотрим на практический пример —

 SELECT * FROM `movies` WHERE` title` REGEXP 'code'; 

Приведенный выше запрос ищет все названия фильмов, в которых есть код слова.[abcd] ‘;

Выполнение вышеуказанного скрипта в рабочей среде MySQL для myflixdb дает следующие результаты.

 
movie_id title Director year_released category_id
4 Кодовое имя Черный Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Код Давинчи NULL 2007 6

Давайте Теперь внимательно посмотрим на наше регулярное выражение, отвечающее за приведенный выше результат.abcd] ‘;

Выполнение вышеуказанного сценария в рабочей среде MySQL для myflixdb дает следующие результаты.

  900 29 Джон Браун 
movie_id title Director year_released category_id
1 Пираты Карибского моря 4 Роб Маршалл 2011 1
2 Забывание Сара Николас Столлер 2008 2
3 Люди Икс 2008
9 Медовый месяц Джон Шульц 2005 8
16 67% Виновен 2012
17 Великий диктатор Чали Чапли 1920 7
18 образец фильма Анонимный 8
19 фильм 3 1920 8

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

Метасимволы регулярного выражения

В приведенном выше примере мы рассмотрели простейшую форму регулярного выражения. Давайте теперь посмотрим на более сложные сопоставления шаблонов регулярных выражений. Предположим, мы хотим искать названия фильмов, которые начинаются с шаблона «код», используя только регулярное выражение, как бы мы это сделали? Ответ — метасимволы.Они позволяют нам точно настраивать результаты поиска по шаблонам с помощью регулярных выражений.

Char Описание Пример
* Звездочка (*) метасимвол используется для соответствия нулю (0) или более экземплярам предшествующие ему строки SELECT * FROM movies WHERE title REGEXP ‘da *’; выдаст все фильмы, содержащие персонажей «да».Например, «Код да Винчи», «Папины маленьких девочек».
+ Метасимвол плюс (+) используется для сопоставления одного или нескольких экземпляров предшествующих ему строк. ВЫБРАТЬ * ИЗ `movies` WHERE` title` REGEXP ‘mon +’; предоставит всем фильмам, содержащим символы «пн». Например, Ангелы и Демоны.
? Вопрос (?) Метасимвол используется для сопоставления нуля (0) или одного экземпляра предшествующей ему строки. ВЫБРАТЬ * ИЗ `категорий` ГДЕ` имя_категории` REGEXP ‘com?’; выдаст все категории, содержащие строку com. Например, комедия, романтическая комедия.
. Метасимвол точка (.) используется для соответствия любому одиночному символу, за исключением новой строки. ВЫБРАТЬ * ИЗ фильмов ГДЕ `year_released` REGEXP ‘200.’; предоставит все фильмы, выпущенные за годы, начиная с символов «200», за которыми следует любой отдельный персонаж.vwxyz] ‘; предоставит все фильмы, содержащие персонажей, кроме «vwxyz».
[A – Z] [A – Z] используется для соответствия любой заглавной букве. SELECT * FROM `members` WHERE` postal_address` REGEXP ‘[A-Z]’; предоставит всем участникам, почтовые адреса которых содержат любые символы от A до Z. Например, Джанет Джонс с номером участника 1.
[az] [az] используется для сопоставления любая строчная буква SELECT * FROM `members` WHERE` postal_address` REGEXP ‘[az]’; предоставит всем участникам, почтовые адреса которых содержат любые символы от a до z.[u] ‘; дает все фильмы, название которых начинается с любого из символов в «cd» или «u». Например, «Черный код», «Папина маленькая девочка», «Код да Винчи» и «Другой мир — Пробуждение».
[[: <:]] [[: <:]] соответствует началу слова. SELECT * FROM `movies` WHERE` title` REGEXP ‘[[: <:]] для'; дает все фильмы, названия которых начинаются с персонажей. Например: забыть Сару Маршал.
[[:>:]] [[:>:]] соответствует концу слова. ВЫБРАТЬ * ИЗ `movies` WHERE` title` REGEXP ‘ack [[:>:]]’; дает все фильмы с названиями, заканчивающимися символами «ack». Например, кодовое имя Black.
[: class:] [: class:] соответствует классу символов, т.е. [: alpha:] соответствует буквам, [: space:] соответствует пробелу, [: punct:] соответствует знакам препинания и [: upper:] для букв высшего класса. ВЫБРАТЬ * ИЗ `movies` WHERE` title` REGEXP ‘[: alpha:]’; дает все фильмы, названия которых содержат только буквы. Например, «Забыть Сару Маршал», «Люди Икс» и т. Д. Такие фильмы, как «Пираты Карибского моря 4», будут опущены в этом запросе.

Обратная косая черта (\) используется как escape-символ. Если мы хотим использовать его как часть шаблона в регулярном выражении, мы должны использовать двойную обратную косую черту (\\)

Резюме

  • Регулярные выражения обеспечивают мощное и гибкое сопоставление с шаблоном, которое может помочь нам реализовать утилиты мощного поиска для наших системы баз данных.
  • REGEXP — это оператор, используемый при сопоставлении с шаблоном регулярного выражения. RLIKE — это синоним
  • Регулярные выражения поддерживают ряд метасимволов, которые обеспечивают большую гибкость и контроль при выполнении сопоставлений с образцом.
  • Обратная косая черта используется как escape-символ в регулярных выражениях. Он учитывается при сопоставлении с шаблоном только в том случае, если использовались двойные обратные косые черты.
  • Регулярные выражения не чувствительны к регистру.

Сопоставление с образцом с регулярными выражениями

Вы хотите выполнить сопоставление с образцом
а не буквальное сравнение.

Используйте оператор REGEXP и регулярное выражение
шаблон, описанный в этом разделе. Или используйте шаблон SQL, описанный
в рецепте 4.7.

шаблонов SQL (см. Рецепт 4.7), скорее всего, будут
реализованы другими системами баз данных, поэтому они
разумно переносимый за пределы MySQL. С другой стороны,
они несколько ограничены. Например, вы можете
легко написать шаблон SQL % abc% для поиска строк
которые содержат abc , но вы не можете написать ни одного
Шаблон SQL для идентификации строк, содержащих любой из символов
a , b или c .Вы также не можете сопоставить содержимое строки на основе типов символов, таких как
буквы или цифры.

Начало строки

$

Конец строки

....]

Любой символ, не указанный в квадратных скобках

p1 | p2 | п3

Чередование; соответствует любому из шаблонов
p1 , p2 , или
п3

*

Ноль или более экземпляров предыдущего элемента

+

Один или несколько экземпляров предыдущего элемента

{ n }

n экземпляров предыдущего элемента

{ м , n }

м n
экземпляры предыдущего элемента

Возможно, вы уже знакомы с этим шаблоном регулярного выражения…pp ‘;
+ ——— +
| имя |
+ ——— +
| медь |
+ ——— +

Кроме того, регулярные выражения имеют другие возможности и могут
выполнять такие совпадения, которые не могут быть выполнены с помощью шаблонов SQL. Например,
регулярные выражения могут содержать классы символов, соответствующие любому
персонаж в классе:

  • Чтобы написать класс символов, перечислите символы, которые должен класс
    совпадать в квадратных скобках. Таким образом, узор
    [abc] соответствует либо a ,
    b или c .0-9] соответствует чему угодно, кроме цифр.

MySQL обычный
Возможности выражения также поддерживают классы символов POSIX. Эти
соответствуют определенным наборам символов, как описано в следующей таблице.

Класс POSIX

Какому классу соответствует

[: alnum:]

Буквенные и цифровые символы

[: alpha:]

Буквенные символы

[: пусто:]

Пробел (символы пробела или табуляции)

[: cntrl:]

Управляющие символы

[: digit:]

цифр

[: график:]

Графические (непустые) символы

[: нижний:]

Буквенные символы нижнего регистра

[: print:]

Графические символы или пробелы

[: punct:]

Знаки пунктуации

[: пробел:]

Пробел, табуляция, новая строка, возврат каретки

[: верх:]

Буквенные символы в верхнем регистре

[: xdigit:]

шестнадцатеричных цифр ( 0-9 , a-f ,
A-F )

Классы POSIX предназначены для использования внутри классов символов, поэтому вы
используйте их в квадратных скобках.Следующее выражение соответствует
значения, содержащие любой символ шестнадцатеричной цифры:

 mysql>   SELECT имя, имя REGEXP '[[: xdigit:]]' FROM metal;  
+ ---------- + ---------------------------- +
| имя | name REGEXP '[[: xdigit:]]' |
+ ---------- + ---------------------------- +
| медь | 1 |
| золото | 1 |
| железо | 0 |
| свинец | 1 |
| ртуть | 1 |
| платина | 1 |
| серебро | 1 |
| олово | 0 |
+ ---------- + ---------------------------- + 

Регулярные выражения могут содержать чередования.Синтаксис выглядит как
это:

   альтернатива1   |   альтернатива2   | ... 

альтернатива
похож на символьный класс в том смысле, что он соответствует, если есть
альтернатив совпадают. Но в отличие от класса персонажей,
альтернативы не ограничиваются одиночными символами — они могут быть
струны или даже узоры. Например, следующее чередование
соответствует строкам, которые начинаются с гласной или заканчиваются на
er :

 mysql>   ВЫБЕРИТЕ имя ИЗ металла ГДЕ имя REGEXP '^ [aeiou] | er $';  
+ -------- +
| имя |
+ -------- +
| медь |
| железо |
| серебро |
+ -------- + 

Для группировки чередований можно использовать круглые скобки..* b. * $ ‘

Регулярные выражения не соответствуют значениям NULL . Этот
верно как для REGEXP , так и для
НЕ REGEXP :

 mysql>   ВЫБЕРИТЕ NULL REGEXP '. *', NULL NOT REGEXP '. *';  
+ ------------------ + ---------------------- +
| NULL REGEXP '. *' | NULL NOT REGEXP '. *' |
+ ------------------ + ---------------------- +
| NULL | NULL |
+ ------------------ + ---------------------- + 

Дело в том, что обычный выражение соответствует строке, если шаблон
найти где-нибудь в строке означает, что вы должны позаботиться о том, чтобы
непреднамеренно указать шаблон, соответствующий пустой строке.если ты
do, он будет соответствовать любому значению , отличному от NULL. Для
Например, шаблон a * соответствует любому количеству
a символов, даже ни одного. Если ваша цель - соответствовать
только строки, содержащие непустые последовательности a
символов, используйте вместо них a + . В
+ требует одного или нескольких экземпляров предыдущего
элемент шаблона для совпадения.

Как и в случае сопоставления шаблонов SQL, выполняемого с использованием LIKE ,
совпадения регулярных выражений выполняются с REGEXP
иногда эквивалентны сравнениям подстрок.[0-9] + '

Это то, что LEFT () не может сделать (и
как и , как , если на то пошло).

SQL RegEx | Регулярные выражения в MySQL с примерами

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

В этой статье я буду обсуждать следующие темы:

Что такое RegEx?

Регулярное выражение, широко известное как RegEx, - это обобщенное выражение, которое используется для сопоставления шаблонов с различными последовательностями символов. RegEx может представлять собой комбинацию различных типов данных, таких как целые числа, специальные символы, строки, изображения и т. Д.Как правило, эти шаблоны используются в алгоритмах поиска по строкам для выполнения операций поиска или поиска и замены в строках или для проверки ввода.

Ниже я перечислил основные функции SQL Regex:

  1. Он обеспечивает мощное и гибкое сопоставление с образцом.
  2. Помогает в реализации мощных утилит поиска для систем баз данных
  3. Поддерживает ряд метасимволов для большей гибкости и контроля при выполнении сопоставления с образцом.
  4. В RegEx обратная косая черта используется как escape-символ.
  5. RegEx не чувствительны к регистру.

Теперь, когда вы знаете, что такое Regex, давайте посмотрим, какие различные RegEx поддерживаются SQL.

SQL Regex

Ниже я перечислил все регулярные выражения, которые можно использовать в SQL.

Шаблон Описание
* Соответствует нулю или нескольким экземплярам предыдущей строки
+ Соответствует одному или нескольким экземплярам предыдущей строки
.abc] Соответствует любому символу, не указанному в квадратных скобках
[AZ] Соответствует любой букве в верхнем регистре
[az] Соответствует любой букве в нижнем регистре
[0-9] Соответствует любой цифре от 0 до 9
[[: <:]] Соответствует началу слова
[[:>:]] Соответствует концу слова
[: class:] Соответствует любому классу символов
p1 | p2 | p3 Соответствует любому из указанного шаблона
{n } Сопоставляет n экземпляров предыдущего элемента
{m, n} Сопоставляет от m до n экземпляров предыдущего элемента

Давайте теперь погрузимся немного глубже и посмотрим, как сформировать RegEx в SQL.

Синтаксис для использования SQL Regex

Использовать Regex действительно просто. Все, что вам нужно сделать, это следовать синтаксису, показанному ниже:

 операторов SELECT ... WHERE field_name REGEXP 'my_pattern'; 

Объяснение

  • SELECT - Select - это стандартное ключевое слово SQL для извлечения данных из таблицы
  • операторов - Указывает строки, которые нужно получить
  • WHERE - WHERE clause используется для укажите условие при выборке данных.
  • field_name - представляет имя столбца, к которому необходимо применить регулярное выражение.
  • REGEXP - это ключевое слово, предшествующее шаблону RegEx
  • my_pattern - Это определяемый пользователем шаблон RegEx для поиска данных

Теперь, когда вы знаете, как сформировать оператор RegEx, позвольте мне показать, как Реализованы SQL RegEx. 23';

  • Соответствует нулю или одному экземпляру предшествующей строки (Ja?)
 SELECT * FROM Learnerdetails WHERE course_name REGEXP 'Ja?'; 
  • Соответствует любому из шаблонов «w | ja»
 ВЫБРАТЬ имя_ученика ИЗ подробностей обучающегося ГДЕ имя_курса REGEXP 'w | ja'; 
  • Соответствует концу строки (yahoo.com $)
 ВЫБРАТЬ имя_ученика ИЗ подробных сведений об ученике ГДЕ имя_ученика REGEXP 'yahoo.com $'; 

Надеюсь, это дает вам представление о том, как формировать запросы. Есть намного больше комбинаций, с которыми вы можете поиграть. На этом я хотел бы завершить статью о SQL RegEx. Для получения дополнительной информации о SQL или базах данных вы можете обратиться к нашему исчерпывающему списку литературы здесь: Базы данных Edureka .

Если вы хотите пройти структурированное обучение работе с MySQL, ознакомьтесь с нашим курсом для сертификации администраторов баз данных MySQL , который включает обучение под руководством инструктора и практический опыт работы с проектами.

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

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