JavaRush /Курсы /SQL SELF /Примеры форматирования данных в реальных задачах

Примеры форматирования данных в реальных задачах

SQL SELF
5 уровень , 4 лекция
Открыта

Один из самых популярных сценариев работы с базами данных — подготовка данных для отчетности. Представьте ситуацию: вы работаете в университете, и ваш начальник (который, конечно же, ничего не понимает в SQL) просит вас создать список студентов с объединением имени и фамилии, а также указать дату рождения в формате DD-MM-YYYY. Задача ясна: нужно красиво оформить данные. И SQL — в этом наш верный помощник.

Пример 1: Объединение имени и фамилии

Начнем с объединения имени (first_name) и фамилии (last_name) студентов из нашей таблицы students.

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name
FROM 
    students;

Что здесь происходит?

  • CONCAT() объединяет строки. Мы добавляем пробел между именем и фамилией для наглядности.
  • Результат сохраняется в новом столбце full_name.

Результат может выглядеть так:

full_name
Otto Art
Anna Song
Pol Mac

Пример 2: Форматирование даты

Теперь добавим к нашему запросу форматирование даты рождения.

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students;

Новое здесь:

  • Мы применяем функцию TO_CHAR() к полю birth_date.
  • Формат 'DD-MM-YYYY' преобразует дату в удобный вид (например: 25-12-2001).

Результат:

full_name formatted_birth_date
Otto Art 12-04-1995
Anna Song 03-08-1996
Pol Mac 21-11-1997

Вуаля! Вы только что создали красивый отчет.

Форматирование для экспорта данных

Допустим, один из ваших коллег хочет выгрузить данные о заказах в CSV-файл для дальнейшей работы в Excel. Но данные в базе хранятся в неудобном для него формате, а люди из отдела продаж требуют конкретного вида. Например, вместо поля total_price, где указана цена заказа, они хотят видеть ее в формате: $100.00.

Пример 3: Преобразование чисел в формат валюты

Оформим данные о заказах из таблицы orders для экспорта:

SELECT
    order_id,
    TO_CHAR(total_price, 'FM$999,999.00') AS formatted_price
FROM 
    orders;

Что делает TO_CHAR() в данном случае?

  • FM (Fill Mode) убирает лишние пробелы.
  • $ добавляет символ валюты.
  • 999,999.00 задает формат с тысячными разделителями и двумя знаками после запятой.

Результат:

order_id formatted_price
1 $1,000.00
2 $2,500.50
3 $10.00

Теперь ваш коллега может легко импортировать данные в Excel и похвалить вас на собрании.

Финальное задание

Вот здесь начинается самое интересное. Давайте объединим все навыки, которые вы уже освоили.

Задача

Создайте запрос для таблицы students, который:

  1. Объединяет имя и фамилию в один столбец full_name.
  2. Преобразует дату рождения в формат DD-MM-YYYY.
  3. Отображает возраст студента на текущую дату.

Запрос будет выглядеть примерно так:

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date,
    DATE_PART('year', AGE(birth_date)) AS age
FROM 
    students;

Новые элементы:

  • AGE(birth_date) возвращает интервал между текущей датой и датой рождения, но в формате года, месяцев и дней.
  • DATE_PART('year', AGE(birth_date)) извлекает из этого интервала только количество лет.

Результат:

full_name formatted_birth_date age
Otto Art 12-04-1995 28
Anna Song 03-08-1996 27
Pol Mac 21-11-1997 25

Такой отчёт удовлетворит даже самых придирчивых коллег.

Форматирование для специфических условий

Иногда форматирование данных нужно для создания условий или фильтрации. Например, достанем студентов, у которых день рождения приходится на текущий месяц.

Пример 4: Фильтрация по месяцу

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students
WHERE 
    DATE_PART('month', birth_date) = DATE_PART('month', CURRENT_DATE);

Как это работает?

  • DATE_PART('month', birth_date) извлекает месяц из даты рождения.
  • CURRENT_DATE предоставляет текущую дату. Мы берем из неё месяц с помощью DATE_PART().

Совмещение форматирования и сортировки

Теперь объединим всё, что узнали, и добавим сортировку. Например, создадим список студентов, отсортированных по их дате рождения.

Пример 5: Сортировка по дате рождения

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students
ORDER BY 
    birth_date ASC;

Сортировка в порядке возрастания ASC покажет сначала самых старших студентов, а в порядке убывания DESC — самых молодых.

Совмещение с уникальными значениями

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

Пример 6: Уникальные значения и сортировка

SELECT DISTINCT
    city 
FROM 
    students
ORDER BY 
    city ASC;

Что делает DISTINCT?

Он исключает дублирующиеся значения, чтобы в результатах был указан каждый город только один раз.

Зачем это всё нужно?

Удобство и красота. Когда данные оформлены красиво, с ними проще работать, а начальники меньше задают вопросов.

Готовность к реальной жизни. Вы сможете автоматически генерировать отчёты, работать с экспортами и готовить красивые презентации.

Повышение вашей ценности. SQL — это не просто про данные. Это про то, как сделать их понятными и полезными.

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

2
Задача
SQL SELF, 5 уровень, 4 лекция
Недоступна
Объединение столбцов и форматирование строк
Объединение столбцов и форматирование строк
2
Задача
SQL SELF, 5 уровень, 4 лекция
Недоступна
Форматирование чисел в валютный вид
Форматирование чисел в валютный вид
1
Опрос
Форматирование строк, 5 уровень, 4 лекция
Недоступен
Форматирование строк
Форматирование строк
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
1nsynq Уровень 7
11 августа 2025
"Сортировка в порядке возрастания ASC покажет сначала самых старших студентов, а в порядке убывания DESC — самых молодых." Ну пожалуй тут наоборот. Ошибка в тексте.
Anonymous #963252 Уровень 10
31 августа 2025
вроде норм, сортировка по дате рождения. самая маленькая дата - самый старший человек.
16 сентября 2025
Ранняя дата меньше, чем более поздняя. Если использовать Unix-время, то оно наглядно показывает, что поздние даты больше ранних (и наоборот): там используется одно число и оно только нарастает (увеличивается) с течением времени. В этом тексте ошибки нет.
Серега Батенин Уровень 12
22 июня 2025
Я конечно все понимаю... Но каким образом предполагается, что люди будут высчитывать день недели полтора года назад?
Андрей Уровень 11
2 июля 2025
В календаре посмотреть)
Anemon Уровень 13 Expert
5 августа 2025
Скорее всего эти тесты и лекцию писала нейронка, поэтому и такой странный вопрос. Они пока ещё не достаточно умненькие.)