Робота з текстовими даними — це щоденна частина задач баз даних. Уяви, ти розробник інтернет-магазину, і в тебе є база користувачів. Треба вивести повні імена користувачів для вітального банера на сайті, наприклад: "Ласкаво просимо, Otto Art!". Або треба стандартизувати всі email-адреси (наприклад, перевести їх у нижній регістр). Без строкових операцій тут ніяк.
PostgreSQL дає потужні інструменти для роботи з текстом. Сьогодні розглянемо три основних інструменти:
CONCAT()— об'єднання рядків.UPPER()— перетворення рядка у верхній регістр.LOWER()— перетворення рядка у нижній регістр.
Робота з функцією CONCAT()
Функція CONCAT() дозволяє з'єднувати декілька рядків в один. Вона незамінна, якщо дані зберігаються у різних стовпцях, а тобі треба їх об'єднати для виводу.
Синтаксис
CONCAT(string1, string2, ..., stringN)
string1,string2,stringN— рядки або стовпці, які ти хочеш об'єднати.- Повертає один рядок, що складається з усіх аргументів.
Приклад: обробляємо імена
Припустимо, у нас є таблиця students:
| first_name | last_name |
|---|---|
| Otto | Art |
| Maria | Chi |
| Anna | Pal |
Наша задача: вивести повні імена студентів у форматі "Ім'я Прізвище".
Запит:
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;
Результат:
| full_name |
|---|
| Otto Art |
| Maria Chi |
| Anna Pal |
Зверни увагу на ' ' між ім'ям і прізвищем. Це пробіл, який ми додали для розділення рядків.
Особливості роботи
CONCAT() ігнорує NULL. Якщо один з аргументів дорівнює NULL, він просто пропускається. Якщо ти ще не знаєш, що таке NULL, не переймайся — розкажемо трохи пізніше.
Альтернатива CONCAT() — оператор ||, наприклад:
SELECT first_name || ' ' || last_name AS full_name FROM students;
Зміна регістру рядків: UPPER() і LOWER()
Уяви, ти працюєш з email-адресами, які користувачі ввели у різних регістрах: ivan@example.com, IVAN@EXAMPLE.COM. Для стандартизації часто треба:
- привести текст до одного вигляду перед порівнянням (наприклад,
lowercase). - виділити важливі слова (наприклад,
UPPERCASEдля заголовків).
UPPER(): текст у верхній регістр
Функція UPPER() переводить текст у рядок великих літер.
Синтаксис:
UPPER(string)
string— рядок або назва текстового стовпця.
Приклад:
У таблиці students додався стовпець email:
| first_name | last_name | |
|---|---|---|
| Otto | Art | otto@example.com |
| Maria | Chi | MARIA@EXAMPLE.com |
| Anna | Pal | anna.pal@gmail.com |
Хочемо вивести email-адреси у верхньому регістрі:
SELECT email, UPPER(email) AS email_upper
FROM students;
Результат:
| email_upper | |
|---|---|
| otto@example.com | OTTO@EXAMPLE.COM |
| MARIA@EXAMPLE.com | MARIA@EXAMPLE.COM |
| anna.pal@gmail.com | ANNA.PAL@GMAIL.com |
LOWER(): текст у нижній регістр
Аналогічно, функція LOWER() переводить текст у нижній регістр.
Синтаксис:
LOWER(string)
Приклад:
Приведемо email-адреси у нижній регістр:
SELECT email, LOWER(email) AS email_lower
FROM students;
Результат:
| email_lower | |
|---|---|
| otto@example.com | otto@example.com |
| MARIA@EXAMPLE.com | maria@example.com |
| anna.pal@gmail.com | anna.pal@gmail.com |
Практичні приклади та кейси
Давай об'єднаємо все, що розібрали вище.
Створення повного імені у верхньому регістрі
Запит:
SELECT CONCAT(UPPER(first_name), ' ', UPPER(last_name)) AS full_name_upper
FROM students;
Результат:
| full_name_upper |
|---|
| OTTO ART |
| MARIA CHI |
| ANNA PAL |
Тут ми використали функцію CONCAT(), щоб об'єднати ім'я і прізвище, і UPPER() для переведення тексту у верхній регістр.
Приклад: стандартизація email-адрес
Хочемо привести всі email-адреси до одного вигляду — нижнього регістру:
UPDATE students
SET email = LOWER(email);
Тепер всі email-адреси в таблиці виглядають однаково, незалежно від початкового регістру.
Як працює оператор UPDATE ти дізнаєшся у наступних лекціях.
Підготовка привітання для користувачів
Додаємо до повних імен привітання "Ласкаво просимо":
SELECT CONCAT('Ласкаво просимо, ', first_name, ' ', last_name, '!') AS greeting
FROM students;
Результат:
| greeting |
|---|
| Ласкаво просимо, Otto Art! |
| Ласкаво просимо, Maria Chi! |
| Ласкаво просимо, Anna Pal! |
Типові помилки при роботі з текстовими функціями
Якщо пропустити пробіл у CONCAT(), результат може виглядати дивно. Наприклад:
SELECT CONCAT(first_name, last_name) AS full_name
FROM students;
Результат буде: "OttoArt", "MariaChi". Завжди додавай пробіл у потрібних місцях.
Використання NULL. Якщо один з аргументів CONCAT() дорівнює NULL, рядок може бути неповним. Наприклад:
SELECT CONCAT(first_name, ' ', middle_name, ' ', last_name) AS full_name
FROM students;
Якщо middle_name = NULL, то результат буде "Otto NULL Art". Щоб цього уникнути, можна використати функцію COALESCE():
SELECT CONCAT(first_name, ' ', COALESCE(middle_name, ''), ' ', last_name) AS full_name
FROM students;
Більше про NULL і функцію COALESCE() дізнаєшся у найближчих лекціях :P
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ