1. Список рядкових функцій

Більше функцій, ніж у дати і часу, лише у типу String, який в SQL встановлюється типами CHAR(n) і VARCHAR(n). Згадаймо найпопулярніші з них:

Функція Опис
1 LENGTH(str) Повертає довжину переданого рядка в байтах
2 CHAR_LENGTH(str) Повертає довжину переданого рядка в char-ах
3 LOCATE(substr,str), Шукає підрядок у рядку аналогічно методу indexOf()
4 LOCATE(substr,str,pos) Шукає рядок у рядку, починаючи з символу pos
5 CONCAT(str1,str2,...) Склеює кілька рядків
6 SUBSTR(), SUBSTRING() Повертає підрядок, вказаний діапазоном символів
7 LOWER(str) Приведе рядок до нижнього регістру
8 UPPER(str) Приведе рядок до верхнього регістру
9 REPLACE() Замінює підрядок у рядку
10 MATCH() Перевіряє збіг рядка зазначеному шаблону
11 TRIM(str) Обрізає порожні символи на початку та в кінці рядка
12 LTRIM(str) Обрізає порожні символи на початку рядка
13 RTRIM(str) Обрізає порожні символи в кінці рядка
14 TO_BASE64(str) Перетворить рядок у Base64
15 FROM_BASE64(str) Перетворить рядок з Base64

Я спеціально згрупував функції у невеликі групи, щоб було легше зрозуміти, як з ними працювати. Нижче ми розглянемо одну функцію з кожної групи. Повний список функцій для роботи з рядками ти знайдеш в офіційній документації.

2. Перетворимо рядок

Давай спочатку розберемося з найпростішими функціями, які просто приведуть рядок до трохи іншого вигляду. Наприклад, приведуть рядок до верхнього та нижнього регістру. Загалом їхня поведінка аналогічна таким же функціям у мові Java.

Тому я просто наведу табличку з кількома прикладами.

# Запит Результат
1 SELECT LENGTH('text') 4
2 SELECT LENGTH('Привіт') 12
3 SELECT LOWER('Привіт') привіт
4 SELECT UPPER('Привіт') ПРИВІТ
5 SELECT SUBSTR('Привіт', 2, 3) рив
6 SELECT SUBSTR('Привіт як справи?', 8) як справи?

Функції працюють так, як ми очікуємо, так само як і аналогічні функції з JDK.

Єдиний нюанс: у першому рядку результат 4, а не 8. Справа в тому, що для кодування латинських символів у запиті використовується 1 байт (кодування ASCII). Але якщо працюватимеш з даними з бази даних, то довжина рядка буде залежати від налаштувань кодування бази даних. На тебе чекає багато сюрпризів при роботі з базою даних :)

3. Складні дії з рядками

Ну і давай розберемо складніші речі під час роботи з рядками. Що б таке вигадати…

Давай відобразимо завдання з таблиці task, і якщо deadline завдання вже минув, додамо до опису завдання слово EXPIRED!

Звучить цікаво. Хоча складні умови ми ще не вчили, тож давай трохи спростимо завдання. Просто напишемо запит, який відобразить список завдань, що минули, але до назви обов'язково додасть слово “EXPIRED!”.

Для цього нам доведеться використовувати функцію CONCAT:

SELECT CONCAT( 'EXPIRED!', name) FROM  task
   WHERE deadline < CURDATE() 

Результат цього запиту буде таким:

concat('EXPIRED!', name)
EXPIRED! Виправити багу на фронтенді

Рекомендація. Якщо тобі потрібно просто привести дані трохи до іншого виду, то це можна зробити і на рівні Java-коду. Але якщо ти хочеш використовувати функції роботи з рядками на боці SQL-сервера( всередині WHERE), то без них тобі точно не обійтися.