Уроки модуля (1/4)
Строковые функции
PostgreSQL имеет десятки функций для работы со строками. В этом уроке
мы рассмотрим наиболее распространенные в реальной работе: нормализация (LOWER/UPPER),
измерение (LENGTH), составление (|| / CONCAT), извлечение (SUBSTRING),
очистка (TRIM), замена (REPLACE) и поиск по шаблону
(LIKE / ILIKE).
Функции, которые мы будем использовать
LOWER('Alice') -- 'alice'
UPPER('alice') -- 'ALICE'
LENGTH('alice') -- 5
'a' || 'b' -- 'ab' (concatenazione)
CONCAT('a', 'b', 'c') -- 'abc' (versione "funzione")
SUBSTRING('hello' FROM 2 FOR 3) -- 'ell'
TRIM(' alice ') -- 'alice'
REPLACE('foo bar', 'bar','x') -- 'foo x'|| — стандартный оператор SQL для объединения строк; CONCAT — это
более разрешительный (он игнорирует NULL, а || распространяет их:
'a' || NULL → NULL).
LIKE и ILIKE: поиск по шаблону
LIKE ищет шаблон: % = любая последовательность, _ = одиночная
персонаж. Оно чувствительно к регистру. ILIKE — это PostgreSQL.
вариант без учета регистра:
WHERE name LIKE '%Cuffie%' -- match esatto "Cuffie"
WHERE name ILIKE '%cuffie%' -- match anche "CUFFIE", "Cuffie", "cuffie"
WHERE email LIKE '%@example.com'
WHERE first_name LIKE 'A_____' -- inizia per A, lungo 6 (A + 5 caratteri)Чтобы найти литерал % или _ внутри шаблона, используйте ESCAPE:
WHERE titolo LIKE '%50\%%' ESCAPE '\'; -- contiene "50%"Объединение функций
Функции составляются как в любом языке:
-- Email "normalizzata" e iniziali in maiuscolo:
SELECT LOWER(email) AS email_norm,
UPPER(SUBSTRING(first_name FROM 1 FOR 1)) || '.'
|| UPPER(SUBSTRING(last_name FROM 1 FOR 1)) || '.' AS iniziali
FROM customers
ORDER BY id;Попробуйте это
Для каждого клиента укажите адрес электронной почты в нижнем регистре (столбец «Электронная почта») и полное имя в виде «имя_фамилия» (столбец «полное_имя»). Заказ по идентификатору.
Показать подсказку
НИЖНИЙ для первого столбца, || для объединения с пробелом между ними.
Решение доступно после 3 попыток
Обзор упражнения
Найдите все товары, в названии которых содержится слово «ноутбук» (в любом случае). Показать только столбец имени. Заказывайте по имени.
Показать подсказку
ILIKE не чувствителен к регистру. Используйте «%laptop%» для соответствия «ноутбуку» в любой позиции.
Решение доступно после 3 попыток