Like sql описание: LIKE (Transact-SQL) — SQL Server

Поиск и регулярные выражения в 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.

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

кекс$’ Результат работы: Первый запрос вернйт нам записи типа: КЕКСЫ МИНИ КОВИС 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

Запрос sql на выборку с подменой значений (Case и Like)

Вопрос задан

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

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

Всем привет! Помогите решить задачу.

Предположим имеется таблица с полями (id/code/name). В поле код содержатся значения соответствующие определенной категории (могут содержаться в тексте, поэтому приходится использовать Like). К примеру ibm25 — самолеты. ibm25-1 — вертолеты. Нужно написать запрос на выборку, в результате которого, эти коды будут представлены в читабельном виде. Я написал запрос:

select distinct a.category, case WHEN a.category like '%25-1%' THEN 'Немодерируемый UGC'
WHEN a.category like '%IAB25%' THEN 'Нестандартный контент'
else 'Категория отсутствует в справочнике'
end AS "1"
from register.creative a

Сложность в том, многие коды могут начинаться одинаково. Пробовал искать по конечной части значений, но Like WHEN a.category like '%25-1%' THEN 'вертолеты' здесь мне все равно возвращает значение «самолеты».

Пример таблицы:

IDTypeCategory
1КартинкаIAB25
2ВидеоIAB25 Non-Standard Contenеt
2ВидеоIAB25-1
2ВидеоIAB26-1 Illegal Content
2ВидеоIAB25-3

Таблица соответствия кодов:

CodeName
IAB25Нестандартный контент
IAB25-1Немодерируемый UGC
IAB26Незаконный контент
IAB26-1Незаконный контент
IAB25-3Нецензурный контент

На выходе хочу получить вместо IAB. . значение которое ему соответствует. Помогите разобраться. Может у кого есть еще какие либо варианты решения задачи?

9

WITH cte AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY content.Category ORDER BY LENGTH(categories.code) DESC) rn
    FROM content
    JOIN categories ON LOCATE(categories.code, content.category)
)
SELECT id, type, category, code, name
FROM cte
WHERE rn = 1;

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=e0f5bc4d1c74778cd87427bf7cea9150

9

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

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

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

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

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

Почта

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

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

Почта

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

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

Реализация оператора LIKE SQL в Google BigQuery

  • Использование оператора LIKE
  • Использование функции СОДЕРЖИТ
  • Использование регулярных выражений

Большинство распространенных механизмов баз данных SQL реализуют оператор LIKE — или что-то функционально похожее — для обеспечения гибкости запросов при поиске совпадений шаблонов строк между одним столбцом и другим столбцом (или между столбцом и определенной текстовой строкой).

К счастью, Google BigQuery не является исключением и поддерживает стандартные НРАВИТСЯ оператор. В ситуациях, когда требуется что-то более гибкое и мощное, BigQuery также позволяет использовать обычные xxpressions с использованием движка RE2 от Google.

Ниже мы рассмотрим использование обоих методов для сужения ваших запросов до результатов, которые вам нужны.

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

LIKE

Для тех, кто знаком с другими распространенными механизмами SQL, использование оператора LIKE в BigQuery должно быть легким делом. Просто добавьте 9Оператор 0004 LIKE и компаратор вашего предложения WHERE , и это все, что нужно:

 SELECT
  имя_репозитория,
  размер_репозитория,
  репозиторий_форкс,
  создан в
ОТ
  [большие общедоступные данные: образцы.github_timeline]
ГДЕ
  имя_репозитория НРАВИТСЯ 'узел'
ПРЕДЕЛ
  1000
 

Результатом, как и ожидалось, являются первые 1000 записей, где имя_репозитория равно (т. е. LIKE ) ‘узел’:

 [
  {
    "repository_name": "узел",
    "размер_репозитория": "23500",
    "repository_forks": "1568",
    "created_at": "2012-03-12 21:37:46"
  },
  {
    "repository_name": "узел",
    "размер_репозитория": "23500",
    "repository_forks": "1568",
    "created_at": "2012-03-12 21:45:17"
  },
  {
    "repository_name": "узел",
    "размер_репозитория": "23500",
    "repository_forks": "1568",
    "created_at": "2012-03-12 21:49:11"
  },
  ...
]
 

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

 SELECT
  имя_репозитория,
  размер_репозитория,
  репозиторий_форкс,
  создан в
ОТ
  [большие общедоступные данные: образцы.github_timeline]
ГДЕ
  имя_репозитория НРАВИТСЯ '%node%'
ПРЕДЕЛ
  1000
 

Теперь мы получаем результаты, где имя_репозитория просто содержит буквы 'узел' где-то там:

 [
  {
    "repository_name": "узел-геос",
    "размер_репозитория": "120",
    "repository_forks": "4",
    "created_at": "2012-03-12 21:29:10"
  },
  {
    "repository_name": "nyc-nodejs-пакеты",
    "размер_репозитория": "928",
    "repository_forks": "1",
    "created_at": "2012-03-12 21:30:56"
  },
  {
    "repository_name": "асинхронное тестирование узла",
    "размер_репозитория": "420",
    "repository_forks": "8",
    "created_at": "2012-03-12 21:32:11"
  },
  . ..
]
 

Оператор LIKE работает как для синтаксиса Legacy SQL (который используется по умолчанию для BigQuery), так и для обновленного синтаксиса SQL (если он включен). Вот тот же пример, что и выше, но с обновленным синтаксисом:

 SELECT.
  имя_репозитория,
  размер_репозитория,
  репозиторий_форкс,
  создан в
ОТ
  `bigquery-public-data.samples.github_timeline`
ГДЕ
  имя_репозитория НРАВИТСЯ '%node%'
ПРЕДЕЛ
  1000
 

Использование функции

СОДЕРЖИТ

Если вы используете LIKE вместе с окружающими символами % , как указано выше, вам лучше использовать строковую функцию CONTAINS , которая ведет себя идентично, но обычно имеет лучшую читаемость.

Следовательно, этот пункт WHERE :

 WHERE
  имя_репозитория НРАВИТСЯ '%node%'
 

функционально идентичен этому пункту WHERE :

 WHERE
  имя_репозитория СОДЕРЖИТ 'узел'
 

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

Для ситуаций, когда вам нужно быть очень точным с шаблоном поиска в вашем WHERE , лучше всего использовать функцию REGEX_MATCH . node-[[:alnum:]]+js$’) ПРЕДЕЛ 1000

Здесь нам нужны только совпадения, в которых имя_репозитория начинается со слова node , за которым следует дефис, затем содержит как минимум один или несколько буквенно-цифровых символов, за которыми следуют js в качестве последних двух символов. Результаты ожидаемы:

 [
  {
    "repository_name": "узел-jinjs",
    "размер_репозитория": "104",
    "repository_forks": "5",
    "created_at": "2012-03-13 02:48:09"
  },
  {
    "repository_name": "узел-ldapjs",
    "размер_репозитория": "172",
    "repository_forks": "17",
    "created_at": "2012-04-23 16:29:19"
  },
  {
    "repository_name": "узел-xml2js",
    "размер_репозитория": "204",
    "repository_forks": "39",
    "created_at": "2012-04-23 14:37:43"
  },
  ,
]
 

SQL как подстановочный знак | Обзор подстановочных знаков и операторов SQL

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

Пример

Допустим, есть таблица под названием FOOD. Теперь мы будем использовать символ SQL Like Wildcard % для извлечения данных.

Код:

 Выбрать *
Из ЕДА
Где Item_Name LIKE 'B%'; 

Как вы можете заметить в приведенной выше программе SQL, % — это подстановочный знак, используемый для выборки данных из сегмента таблицы Item_Name, где имя элемента начинается с B. Вы также можете заметить использование оператора LIKE в программе.

Key Highlights

  • Подстановочные знаки SQL используются для выборки значений из таблицы
  • Имеется два подстановочных знака SQL: «_» и «%».
  • Подстановочные знаки SQL в сочетании с оператором LIKE позволяют извлекать значения из таблицы по определенным поисковым запросам.

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

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

Обозначает символы без квадратных скобок
Обозначает один символ в определенном диапазоне

Однако, если вы используете MS Access вместо SQL Server, символы будут другими. Взгляните:

Символ Описание
* Обозначает символы, включая ноль
? Обозначает один символ
[] Обозначает один символ в скобках
! Обозначает символы без квадратных скобок
Обозначает один символ в определенном диапазоне
# Обозначает один цифровой символ

SQL Like Wildcard Operators

В SQL Like Wildcard используются два оператора. Это:

1. Знак процента (%)

Этот оператор может соответствовать одному или нескольким символам. Однако MS Access представляет этот оператор иначе. В MS Access для обозначения этого оператора используется * (звездочка).

Пример:

Рассмотрим таблицу Food с именем столбца Item_Name.

Код:

 Выберите * из ЕДА
Где Item_Name LIKE 'B%' 

или

 Выберите * из FOOD
Где Item_Name LIKE '%B' 
2. Символ подчеркивания (_)

Этот оператор может соответствовать только одному символу. Однако MS Access представляет этот оператор иначе. В MS Access, ? (Вопросительный знак) используется для представления этого оператора.

Код:

 Выберите * из FOOD
Где Item_Name LIKE 'B_' 

или

 Выберите * из FOOD
Где Item_Name LIKE '_B' 

Примечание: При необходимости операторы можно использовать вместе.

Оператор подстановочных знаков SQL Like

Операторы % и _ можно использовать с операторами подстановочных знаков SQL Like для выборки или сравнения значений из таблицы. Сказав это, есть определенные способы добиться того же. Давайте обсудим это.

Синтаксис:

 Выбрать из table_name
Где имя_столбца LIKE 'строковый шаблон' 

В SQL вы будете использовать % для соответствия любому количеству символов, включая ноль, а _ используется для соответствия только одному символу. Давайте возьмем пример, когда вы хотите получить все элементы из таблицы FOOD, которая начинается с буквы «B». В этом случае вам нужно использовать синтаксис %. Таким образом, весь синтаксис будет таким:

Синтаксис:

 Выберите * из FOOD
Где Item_Name LIKE 'B%' 

Теперь предположим, что вы хотите получить каждое имя из таблицы FOOD, содержащее буквы «Бургер». В этом случае вам нужно написать синтаксис немного по-другому. Посмотрите:

Синтаксис:

 Выберите * из FOOD
Где Item_Name LIKE '%Burger%' 

Достаточно подстановочного знака %. Теперь, что насчет знака _? Вы будете использовать этот оператор подстановки _ для извлечения одного символа из таблицы. Давайте посмотрим пример:

Код:

 Выберите * из FOOD
Где Item_Code LIKE '_1' 

Здесь код будет извлекать все двузначные коды товаров, оканчивающиеся на «1».

Другие примеры:

Давайте конкретизируем оператор SQL Like Wildcard. Мы будем использовать более краткий пример для идентификации процесса. Рассмотрим стол под названием FOOD. В нем есть столбцы Item_Code, Item_Name и Item_Cost.

ПРОДОВОЛЬСТВИЕ
Код товара Имя_элемента Товар_Стоимость
11 Чизбургер 100
22 Куриный бургер 200
31 Овощная пицца 150
45 Картофель фри 80

Теперь мы будем использовать подстановочный знак «%» с оператором LIKE для получения результатов. Давайте посмотрим. Мы будем использовать подстановочный знак % для извлечения всех «гамбургеров» из таблицы FOOD. Взгляните на код:

Код:

 выберите * из FOOD
где Item_Name LIKE 'Burger%'; 

Результат, который он отобразит:

ЕДА
Код товара Имя_элемента Товар_Стоимость
11 Чизбургер 100
22 Куриный бургер 200

Вы можете заметить, что 2 из 4 записей содержат слово «Бургер». Следовательно, он отображает результаты соответственно.

Примечание. Операторы SQL Like не чувствительны к регистру. Отныне, независимо от того, вводите ли вы «Бургер%» или «Бургер%», результаты будут одинаковыми.

Вы даже можете найти слова, оканчивающиеся на определенный символ, используя подстановочный знак «%». Давайте возьмем пример, где мы хотим найти все продукты питания, оканчивающиеся на «s». Итак, код.

Код:

 выберите * из ПИТАНИЯ
где Item_Name LIKE '%s'; 

Здесь будут отображаться все элементы, оканчивающиеся на «s».

ПРОДУКТЫ
Код товара Имя_элемента Товар_Стоимость
45 Картофель фри 80

Только «Картофель фри» из таблицы FOOD заканчивается на «s». Следовательно, результат отображается одинаково.

Как насчет подстановочного знака «_»? Что ж, мы рассмотрим несколько примеров, чтобы лучше понять.

Еще раз взгляните на таблицу FOOD:

FOOD
Код товара Имя_элемента Товар_Стоимость
11 Чизбургер 100
22 Куриный бургер 200
31 Овощная пицца 150
45 Картофель фри 80

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

Код:

 выберите * из FOOD
где Item_Code LIKE '_1'; 

Это вернет следующий вывод:

FOOD
Item_Code Имя_элемента Товар_Стоимость
11 Чизбургер 100
31 Овощная пицца 150

Теперь, если вы хотите найти стоимость всех предметов, оканчивающихся на 0, вы должны использовать два символа подчеркивания. Поскольку стоимость товара состоит из трех цифр, вам нужно использовать два символа подчеркивания. Давайте посмотрим пример:

Код:

 выберите * из FOOD
где Item_Cost LIKE '__0'; 

Это вернет следующий вывод:

FOOD
Код товара Имя_элемента Товар_Стоимость
11 Чизбургер 100
22 Куриный бургер 200
31 Овощная пицца 150
45 Картофель фри 80

Заключение

Подстановочные знаки SQL Like используются для сравнения значений из таблицы SQL.

Оставить комментарий

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

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