Когда вы работаете с именами, адресами, email'ами или любыми другими текстами — вам почти всегда нужно делать одно из двух:
- Извлечь часть строки
- Узнать длину
- Очистить лишние пробелы
- Найти/заменить фрагмент
- Отформатировать вывод
Например, вам нужно:
- Вывести только фамилию из полного имени.
- Найти студентов, у которых фамилия начинается с «П».
- Заменить все пробелы на подчёркивания.
- Вывести фамилию с заглавной буквы.
Все эти задачи легко решаются с помощью строковых функций PostgreSQL.
LENGTH() — длина строки
Функция LENGTH() возвращает количество символов в строке.
Синтаксис:
LENGTH(string)
Пример:
SELECT name, LENGTH(name) AS name_length
FROM students;
| name | name_length |
|---|---|
| Art | 3 |
| Song | 4 |
| Pal | 3 |
Полезно для проверки длины ФИО, паролей и других текстов.
SUBSTRING() — извлечение части строки
Позволяет достать подстроку из строки — например, первые 3 символа фамилии или домен из email.
Синтаксис:
SUBSTRING(string FROM start FOR length)
start— позиция первого символа (нумерация с 1)length— сколько символов извлечь
Пример 1: первые 3 буквы фамилии
SELECT last_name, SUBSTRING(last_name FROM 1 FOR 3) AS prefix
FROM students;
| last_name | prefix |
|---|---|
| Song | Son |
| Pal | Pal |
Пример 2: домен email'а
SELECT email, SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM students;
| domain | |
|---|---|
| otto@example.com | example.com |
| maria@gmail.com | gmail.com |
TRIM() — удаление лишних пробелов
Удаляет пробелы (и другие символы) в начале и/или в конце строки.
Синтаксис:
TRIM([LEADING | TRAILING | BOTH] chars FROM string)
Но чаще всего используется просто:
TRIM(string)
Пример:
SELECT '[' || TRIM(' Art ') || ']' AS cleaned;
| cleaned |
|---|
| [Art] |
Особенно важно, если пользователи вводят данные вручную (например, с пробелами в начале).
POSITION() — поиск подстроки
Возвращает позицию, с которой начинается подстрока.
Синтаксис:
POSITION(substring IN string)
Пример:
SELECT email, POSITION('@' IN email) AS at_position
FROM students;
| at_position | |
|---|---|
| otto@example.com | 5 |
| anna.pal@gmail.com | 9 |
Можно использовать с SUBSTRING() для извлечения частей строки.
REPLACE() — замена подстроки
Заменяет все вхождения одной подстроки на другую.
Синтаксис:
REPLACE(string, from_substring, to_substring)
Пример: заменить пробелы на подчёркивания
SELECT name, REPLACE(name, ' ', '_') AS fixed_name
FROM students;
| name | fixed_name |
|---|---|
| Otto Art | Otto_Art |
| Maria Chi | Maria_Chi |
INITCAP() — первая буква заглавная
Преобразует строку так, чтобы первая буква каждого слова была заглавной, остальные — строчные.
Синтаксис:
INITCAP(string)
Пример:
SELECT INITCAP('anna pal') AS full_name;
| full_name |
|---|
| Anna Pal |
Удобно для стандартизации ФИО.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ