Часть 9 учебника SQL. Работа со строками в PostgreSQL. LIKE и ILIKE для поиска, SUBSTRING для обрезки, CONCAT для соединения, regex для сложных паттернов.
TL;DR: LIKE 'pat%' — поиск по подстроке с wildcard (% любая последовательность, _ любой 1 символ). ILIKE — то же без учёта регистра. SUBSTRING(s FROM x FOR y) — обрезка. CONCAT или || — соединение. REGEXP_REPLACE / ~ — regex. Для аналитики нужны почти все эти функции.
В этой части:
LIKE 'pattern' с двумя wildcard:
% — любая последовательность (включая пустую)_ — ровно один любой символSUBSTRING(s FROM start FOR length) или короче SUBSTRING(s, start, length):
| Функция | Что делает | Пример | ||||
|---|---|---|---|---|---|---|
LENGTH(s) | Длина строки | LENGTH('hello') = 5 | ||||
UPPER(s) | В верхний регистр | UPPER('hi') = 'HI' | ||||
LOWER(s) | В нижний | LOWER('Hi') = 'hi' | ||||
TRIM(s) | Убрать пробелы по краям | TRIM(' hi ') = 'hi' | ||||
CONCAT(a, b) или a \ | \ | b | Соединение | 'a' \ | \ | 'b' = 'ab' |
REPLACE(s, old, new) | Замена | REPLACE('abc', 'b', 'X') = 'aXc' | ||||
SPLIT_PART(s, delim, n) | n-я часть после split | SPLIT_PART('a.b.c', '.', 2) = 'b' | ||||
LEFT(s, n) / RIGHT(s, n) | Слева/справа N символов | LEFT('hello', 3) = 'hel' |
Регулярные выражения — для сложных текстовых паттернов, недоступных LIKE.
В PG — оператор ~ (match) и !~ (не match), регистронезависимые ~* / !~*:
=. LIKE 'apple' найдёт только точное совпадение.'\.' в SQL может потребовать '\\.' (двойной слеш).CONCAT(NULL, 'hello') в стандарте даёт NULL, в PG — 'hello' (NULL ignored). Знай свой диалект.TRIM убирает только пробелы. Для невидимых символов (tab, newline) — TRIM(BOTH E' \t\n' FROM s).LIKE с префиксом без ведущего % (например 'text%') может использовать индекс — это быстро. Паттерн '%text%' с ведущим % индекс не использует — это full scan, как и regex. Regex берут не скоростью, а выразительностью: он короче, когда заменяет 5+ OR-условий с LIKE.