Список строковых функций

Больше функций, чем у даты и времени, — только у типа 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

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

Преобразуем строку

Давай для начала разберемся с самыми простыми функциями, которые просто преобразовывают строку к немного другому виду. Например, преобразовывают строку в верхний и нижний регистр. В целом их поведение аналогично таким же функциям в языке 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). Но если будешь работать с данными из базы данных, то длина строки будет зависеть от настроек кодировки базы данных. Тебя ждет много сюрпризов при работе с базой данных :)

Сложные действия со строками

Ну и давай разберем более сложные вещи при работе со строками. Что бы такое придумать…

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

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

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

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

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

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

Рекомендация. Если тебе нужно просто преобразовать данные немного к другому виду, то это можно сделать и на уровне Java-кода. Но если ты хочешь использовать функции работы со строками на стороне SQL-сервера( внутри WHERE), то без них тебе точно не обойтись.