Список строковых функций
Больше функций, чем у даты и времени, — только у типа 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), то без них тебе точно не обойтись.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ