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_id | first_name |
---|---|
1 | Julia |
4 | Jeremy |
Поскольку 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-моделях, но он содержит некоторые общие сценарии, с которыми аналитические инженеры сталкиваются ежедневно.