Перейти к основному содержимому
Модуль 6 · Урок 1 из 421/57 в курсе~12 min
Уроки модуля (1/4)

Строковые функции

PostgreSQL имеет десятки функций для работы со строками. В этом уроке мы рассмотрим наиболее распространенные в реальной работе: нормализация (LOWER/UPPER), измерение (LENGTH), составление (|| / CONCAT), извлечение (SUBSTRING), очистка (TRIM), замена (REPLACE) и поиск по шаблону (LIKE / ILIKE).

Функции, которые мы будем использовать

SQL
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. вариант без учета регистра:

SQL
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:

SQL
WHERE titolo LIKE '%50\%%' ESCAPE '\';   -- contiene "50%"

Объединение функций

Функции составляются как в любом языке:

SQL
-- 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;

Попробуйте это

Упражнение#sql.m6.l1.e1
Попыток: 0Загрузка…

Для каждого клиента укажите адрес электронной почты в нижнем регистре (столбец «Электронная почта») и полное имя в виде «имя_фамилия» (столбец «полное_имя»). Заказ по идентификатору.

Загрузка редактора…
Показать подсказку

НИЖНИЙ для первого столбца, || для объединения с пробелом между ними.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#sql.m6.l1.e2
Попыток: 0Загрузка…

Найдите все товары, в названии которых содержится слово «ноутбук» (в любом случае). Показать только столбец имени. Заказывайте по имени.

Загрузка редактора…
Показать подсказку

ILIKE не чувствителен к регистру. Используйте «%laptop%» для соответствия «ноутбуку» в любой позиции.

Решение доступно после 3 попыток