УРОК 13 / 27· ≈ 20 мин

Строки и приведение типов

Работа с текстом

Данные редко бывают идеально чистыми: имена в разном регистре, лишние пробелы, коды, склеенные с названиями. Основные функции PostgreSQL для текста:

ФункцияЧто делаетПример
||склеивает строкиcity || ' (' || airport_code || ')'
UPPER, LOWER, INITCAPменяют регистрINITCAP('ivan petrov') → Ivan Petrov
LENGTHдлина строкиLENGTH(airport_name)
LEFT, SUBSTRINGчасть строкиLEFT(passenger_name, 1)
SPLIT_PARTкусок строки по разделителюSPLIT_PART('IVAN PETROV', ' ', 2) → PETROV
TRIM, REPLACEубирают пробелы, заменяют подстрокуREPLACE(model, 'Airbus ', '')

Приведение типов

Иногда значение нужно превратить в другой тип: число в текст, текст в дату, целое в дробное. В PostgreSQL для этого есть две записи: стандартная CAST(range AS numeric) и короткая range::numeric.

Самая частая причина — целочисленное деление. range / speed на целых числах отбросит дробную часть: 11100 / 905 даст 12, а не 12,27. Достаточно привести одно из чисел к дробному типу: range::numeric / speed.

Типичные ошибки

  • Склейка с NULL. 'Рейс ' || NULL даёт NULL — вся строка пропадает. Функция CONCAT('Рейс ', NULL) пустое значение просто пропустит.
  • Сравнение без учёта регистра. Если в данных встречаются разные регистры, сравнивайте приведённые значения: LOWER(city) = 'moscow'.
  • Числа, сохранённые как текст. Текст сортируется посимвольно: '10' окажется раньше '9'. Перед сортировкой и сравнением приводите к числу.

Практика

6
  1. Тест 1 — Что вернёт выражение «11100 / 905» в PostgreSQL, если оба числа целые?
  2. Тест 2 — Что вернёт «'Рейс ' || NULL»?
  3. Задача 1 — Город и код аэропорта
  4. Задача 2 — Самые длинные названия аэропортов
  5. Задача 3 — Самые частые фамилии пассажиров
  6. Задача 4 — Сколько часов в воздухе

Задачи решаются прямо здесь, в браузере, на учебной базе — нужна только бесплатная регистрация, чтобы сохранялись ответы и прогресс.

Зарегистрироваться и решитьВойти

Потренируйтесь в тренажёре

7

Задачи на ту же тему, но на другой базе — продажи магазина электроники. Хороший способ проверить, что тема понятна, а не просто запомнилась на примерах урока.

Все задачи тренажёра →
Даты и времяСледующий урок: INNER JOIN: связываем таблицы