Вычисления и функции

Вычисляемые столбцы и функции для строк и чисел

Содержание курса

Строковые функции 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 только читает данные.