Модульні уроки (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 є
більш дозволений (він ігнорує NULLs, тоді як || поширює їх:
'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;Спробуйте
Для кожного клієнта відображайте електронну адресу в нижньому регістрі (стовпець електронної пошти) і повне ім’я як «ім’я прізвище» (стовпець повне_ім’я). Замовлення по id.
Показати підказку
LOWER для першого стовпця, || для об’єднання з пробілом між ними.
Рішення доступне після 3 спроб
Повторна вправа
Знайдіть усі продукти, у назві яких є слово «ноутбук» (у будь-якому регістрі). Показати лише стовпець імені. Порядок по імені.
Показати підказку
ILIKE не враховує регістр. Використовуйте "%laptop%", щоб відповідати "ноутбук" у будь-якому місці.
Рішення доступне після 3 спроб