Перейти к основному содержимому

SQL LIKE

Оператор LIKE помогает легко сопоставлять, находить и фильтровать строковые значения по заданному шаблону с использованием SQL-символов подстановки. Важно отметить, что шаблон, передаваемый в оператор LIKE, чувствителен к регистру, в отличие от его нечувствительного к регистру аналога, ILIKE.

Как использовать оператор SQL LIKE

Оператор LIKE имеет простой синтаксис и может использоваться в WHERE-условиях или в case-выражениях:

where <field_name> like '<pattern>' или case when <field_name> like '<pattern>'

Некоторые заметки о синтаксисе и функциональности этого оператора:

  • <pattern> может использовать два SQL-символа подстановки (% и _); подчеркивание соответствует любому одному символу, а % соответствует нулю или более символам
    • Пример: '%J' = любая строка, заканчивающаяся на заглавную J
    • Пример: 'J%' = любая строка, начинающаяся с заглавной J
    • Пример: 'J%L' = любая строка, начинающаяся с заглавной J и заканчивающаяся заглавной L
    • Пример: '_J%' = любая строка, в которой заглавная J находится на второй позиции
  • В большинстве случаев использования оператора LIKE, вероятно, будет задействован символ подстановки %
  • Оператор LIKE чувствителен к регистру, что означает, что регистр в <pattern>, который вы хотите отфильтровать, должен совпадать с регистром в значениях вашего столбца; для столбцов с различным регистром используйте нечувствительный к регистру оператор ILIKE
  • Оператор LIKE может быть использован с оператором NOT, чтобы фильтровать строки, которые не соответствуют заданному шаблону

Давайте теперь рассмотрим практический пример использования оператора LIKE.

Пример SQL LIKE

select
user_id,
first_name
from {{ ref('customers') }}
where first_name like 'J%'
order by 1

Этот простой запрос, использующий таблицу customers из Jaffle Shop, вернет всех клиентов, чье имя начинается с заглавной буквы J:

customer_idfirst_name
1Julia
4Jeremy

Поскольку LIKE чувствителен к регистру, он не вернет результаты в этом запросе для клиентов с именами, начинающимися с маленькой буквы j. Если в ваших данных есть смесь строк с заглавными и строчными буквами, рассмотрите возможность стандартизации регистра строк с помощью функций UPPER и LOWER или используйте более гибкий оператор ILIKE.

Синтаксис LIKE в Snowflake, Databricks, BigQuery и Redshift

Большинство современных хранилищ данных поддерживают оператор LIKE, и синтаксис также одинаков для них. Некоторые хранилища данных, такие как Snowflake и Databricks, дополнительно поддерживают аналогичные или более гибкие операторы, такие как ILIKE, нечувствительная к регистру версия LIKE, или LIKE ANY, который позволяет передавать несколько вариантов шаблона для поиска.

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

Хранилище данныхПоддержка LIKE?
Snowflake
Databricks
Amazon Redshift
Google BigQuery

Примеры использования оператора LIKE

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

  • Группировки значений столбцов на основе общих требований с использованием case-выражений и оператора LIKE (например, case when page_path like '/product%' then 'product_page' else 'non_product_page')
  • Фильтрации записей электронной почты сотрудников на основе схожего шаблона адреса электронной почты (например, where email_address not like '%@dbtlabs.com')

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

0