Вычисляемые столбцы и функции для строк и чисел
Содержание курса
Строковые функции UPPER, LOWER, LENGTH, TRIM в SELECT
Арифметические операторы работают с числами; для строк в SQL есть встроенные функции. Синтаксис прямой: имя функции, а в скобках — столбец или строковый литерал. Результат становится вычисляемым столбцом — всё то же самое, что с price * quantity, только вместо оператора — вызов функции.
Четыре функции, которые используются чаще всего:
UPPER(строка)— переводит латинские буквы в верхний регистр.LOWER(строка)— переводит латинские буквы в нижний регистр.LENGTH(строка)— возвращает количество символов в строке.TRIM(строка)— удаляет пробелы с левого и правого краёв строки.
Практический запрос с таблицей products, где есть столбец title:
SELECT UPPER(title) AS название_верхний,
LENGTH(title) AS длина_названия,
TRIM(title) AS название_без_пробелов
FROM products;
Каждая строка таблицы даст три вычисленных значения. LENGTH вернёт целое число — количество символов без учёта регистра и содержимого. TRIM полезен, когда название попало в таблицу с лишними пробелами: строки ' Мышь' и 'Мышь' при сравнении не совпадут, а после TRIM — совпадут.
Важное ограничение стандартной сборки SQLite: UPPER и LOWER меняют только символы ASCII-диапазона — латиницу. Кириллические буквы функция «не знает» и оставляет без изменения. Запрос SELECT UPPER('привет'); вернёт 'привет' — строку без каких-либо изменений. Это не ошибка и не сообщение — просто функция не применяется к символам вне ASCII. В других СУБД поддержка регистра вне ASCII зависит от конкретной конфигурации; для стандартной сборки SQLite важно помнить именно это ограничение.
Функции можно комбинировать в одном столбце. Например, чтобы убрать пробелы и затем привести к верхнему регистру:
SELECT UPPER(TRIM(title)) AS название_верхний FROM products;
SQLite вычислит выражение изнутри наружу: сначала TRIM(title), затем UPPER от результата. Результат в таблице не изменится — по той же причине, что и при арифметике: SELECT только читает данные.
