Работа со строками: CONCAT, SUBSTRING, LENGTH, UPPER, LOWER и др.
📜 Строки в SQL: Твой новый супер-инструмент
Строки — это не просто текст в БД. Это данные, которые можно преобразовывать, анализировать и даже оживлять с помощью SQL. Давай разберём ключевые функции, которые сделают тебя мастером строк!
🔗 CONCAT: Собираем пазлы из строк
CONCAT склеивает строки как конструктор LEGO. Просто, но мощно!
SELECT CONCAT('Hello, ', 'SQL ', 'World!') AS greeting;
-- Результат: 'Hello, SQL World!'
А так — с данными из таблицы (пример для таблицы users):
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM users;
Фишка: В некоторых СУБД (MySQL) можно использовать || или + для конкатенации, но CONCAT работает везде!
✂️ SUBSTRING: Вырезаем нужные кусочки
SUBSTRING (или SUBSTR) — это хирургический инструмент для строк. Указываем начало и длину — получаем результат.
SELECT SUBSTRING('SQL is awesome!', 1, 3) AS result;
-- Результат: 'SQL'
Пример с датой в строке (из orders):
SELECT
order_id,
SUBSTRING(order_date::TEXT, 1, 10) AS date_only -- Преобразуем дату в текст и берём первые 10 символов (YYYY-MM-DD)
FROM orders;
Важно: Нумерация символов обычно начинается с 1 (не с 0, как в Python!).
📏 LENGTH: Измеряем длину строки
LENGTH (или LEN в некоторых СУБД) — это "линейка" для строк.
SELECT LENGTH('Supercalifragilisticexpialidocious') AS word_length;
-- Результат: 34
Практическое применение — валидация паролей:
SELECT username
FROM users
WHERE LENGTH(password) < 8; -- Находим пользователей со слабыми паролями
🔠 UPPER и LOWER: Меняем регистр
Эти функции — "капслок" и "антикапслок" SQL-мира.
SELECT
UPPER('E=mc²') AS shout,
LOWER('ПРИВЕТ, SQL!') AS whisper;
-- Результат: 'E=MC²', 'привет, sql!'
Пример для поиска без учёта регистра:
SELECT product_name
FROM products
WHERE LOWER(product_name) LIKE '%coffee%'; -- Найдёт "Coffee", "COFFEE" и даже "cOfFeE"
🔍 TRIM: Убираем лишние пробелы
TRIM чистит строки как ножницы:
SELECT TRIM(' Too many spaces! ') AS neat_string;
-- Результат: 'Too many spaces!'
Варианты:
- LTRIM — обрезает слева
- RTRIM — обрезает справа
🎯 REPLACE: Меняем текст внутри строки
REPLACE — это "найти и заменить" в SQL.
SELECT REPLACE('I like cats', 'cats', 'dogs') AS new_opinion;
-- Результат: 'I like dogs'
Реальный кейс — маскирование данных:
SELECT
user_id,
REPLACE(email, SUBSTRING(email, 3, POSITION('@' IN email)-3), '***') AS masked_email
FROM users;
-- Преобразует 'alice@example.com' в 'al***@example.com'
🧩 POSITION и INSTR: Ищем подстроки
Где находится определённый символ? Эти функции — детективы для строк.
SELECT POSITION('@' IN 'user@example.com') AS at_position;
-- Результат: 5
Практический пример — разбиение email:
SELECT
email,
SUBSTRING(email, 1, POSITION('@' IN email)-1) AS username,
SUBSTRING(email, POSITION('@' IN email)+1) AS domain
FROM users;
🎨 Форматируем строки красиво
Комбинируем функции для мощных преобразований:
-- Приводим имена к формату "Фамилия, И."
SELECT
CONCAT(
UPPER(SUBSTRING(last_name, 1, 1)),
LOWER(SUBSTRING(last_name, 2)),
', ',
UPPER(SUBSTRING(first_name, 1, 1)),
'.'
) AS formatted_name
FROM employees;
-- Преобразует 'jOhN dOe' в 'Doe, J.'
🏆 Твой черед!
Попробуй эти запросы в своей БД. Экспериментируй с:
- Объединением данных из разных колонок
- Извлечением частей строк (например, кода города из телефона)
- Созданием "масок" для конфиденциальных данных
- Автоматическим форматированием отчетов
SQL-строки — это твой швейцарский нож для работы с текстом! 🔪✨