JavaRush /Курсы /SQL SELF /Форматирование строк: CONCAT(), UPPER(), LOWER()

Форматирование строк: CONCAT(), UPPER(), LOWER()

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

Работа с текстовыми данными — это ежедневная часть задач баз данных. Представьте, что вы разработчик интернет-магазина, и у вас есть база данных пользователей. Вам нужно вывести полные имена пользователей для приветственного баннера на сайте, например: "Добро пожаловать, Otto Art!". Или вам требуется стандартизировать все email-адреса (например, перевести их в нижний регистр). В этих случаях без строковых операций никак.

PostgreSQL предоставляет мощные инструменты для работы с текстом. Сегодня мы разберём три основных инструмента:

  • CONCAT() — объединение строк.
  • UPPER() — преобразование строки в верхний регистр.
  • LOWER() — преобразование строки в нижний регистр.

Работа с функцией CONCAT()

Функция CONCAT() позволяет соединять несколько строк в одну. Она незаменима, если данные хранятся в разных столбцах, но вам нужно объединить их для вывода.

Синтаксис

CONCAT(string1, string2, ..., stringN)
  • string1, string2, stringN — строки или столбцы, которые вы хотите объединить.
  • Возвращает одну строку, состоящую из всех аргументов.

Пример: обрабатываем имена

Допустим, у нас есть таблица students:

first_name last_name
Otto Art
Maria Chi
Anna Pal

Наша задача: вывести полные имена студентов в формате "Имя Фамилия".

Запрос:

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

Результат:

full_name
Otto Art
Mariq Chi
Anna Pal

Обратите внимание на ' ' между именем и фамилией. Это пробел, который мы добавили для разделения строк.

Особенности работы

CONCAT() игнорирует NULL. Если один из аргументов равен NULL, он просто пропустится. Если вы еще не знаете что такое NULL, не волнуйтесь - мы расскажем о нем немного позднее.

Альтернатива CONCAT() — оператор ||, например:

SELECT first_name || ' ' || last_name AS full_name FROM students;

Изменение регистра строк: UPPER() и LOWER()

Представьте, что вы работаете с email-адресами, которые пользователи ввели в самых разных регистрах: ivan@example.com, IVAN@EXAMPLE.COM. Для стандартизации часто требуется:

  • привести текст к одному виду перед сравнением (например, lowercase).
  • выделить важные слова (например, UPPERCASE для заголовков).

UPPER(): текст в верхний регистр

Функция UPPER() преобразует текст в строку заглавных букв.

Синтаксис:

UPPER(string)
  • string — строка или название текстового столбца.

Пример:

В таблице students добавился столбец email:

first_name last_name email
Otto Art otto@example.com
Maria Chi MARIA@EXAMPLE.com
Анна Pal anna.pal@mail.ru

Хотим вывести email-адреса в верхнем регистре:

SELECT email, UPPER(email) AS email_upper
FROM students;

Результат:

email email_upper
otto@example.com OTTO@EXAMPLE.COM
MARIA@EXAMPLE.com MARIA@EXAMPLE.COM
anna.pal@gmail.com ANNA.PAL@GMAIL.COM

LOWER(): текст в нижний регистр

Аналогично, функция LOWER() преобразует текст в нижний регистр.

Синтаксис:

LOWER(string)

Пример:

Приведём email-адреса в нижний регистр:

SELECT email, LOWER(email) AS email_lower
FROM students;

Результат:

email email_lower
otto@example.com otto@example.com
MARIA@EXAMPLE.com maria@example.com
anna.pal@gmail.com anna.pal@gmail.com

Практические примеры и кейсы

Давайте объединим всё вышеизученное.

Создание полного имени в верхнем регистре

Запрос:

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

Результат:

full_name_upper
OTTO ART
MARIA CHI
ANNA PAL

Здесь мы использовали функцию CONCAT(), чтобы объединить имя и фамилию, и UPPER() для приведения текста к верхнему регистру.

Пример: стандартизация email-адресов

Хотим привести все email-адреса к одному виду — нижнему регистру:

UPDATE students
SET email = LOWER(email);

Теперь все email-адреса в таблице выглядят одинаково, вне зависимости от исходного регистра.

Как работает оператор UPDATE вы узнаете в следующих лекциях.

Подготовка приветствия для пользователей

Добавим к полным именам приветствие "Добро пожаловать":

SELECT CONCAT('Добро пожаловать, ', first_name, ' ', last_name, '!') AS greeting
FROM students;

Результат:

greeting
Добро пожаловать, Otto Art!
Добро пожаловать, Maria Chi!
Добро пожаловать, Anna Pal!

Типичные ошибки при работе с текстовыми функциями

Если пропустить пробел в CONCAT(), результат может выглядеть некорректно. Например:

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

Результат будет: "OttoArt", "MariaChi". Всегда добавляйте пробел в нужных местах.

Использование NULL. Если один из аргументов CONCAT() равен NULL, строка может оказаться неполной. Например:

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

Если middle_name = NULL, то результат будет "Otto NULL Art". Чтобы избежать этого, можно использовать функцию COALESCE():

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

Подробнее о NULL и функции COALESCE() вы узнаете в ближайших лекциях :P

2
Задача
SQL SELF, 5 уровень, 1 лекция
Недоступна
Преобразование в верхний регистр
Преобразование в верхний регистр
2
Задача
SQL SELF, 5 уровень, 1 лекция
Недоступна
Стандартизация email-адресов
Стандартизация email-адресов
Комментарии (11)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анатолий Уровень 27
22 января 2026
Если у кого-то в IDE не отрабатывает UPPER / LOWER на кирилице (при этом на латинице работает). просто пересоздайте базу данных с поддержкой кирилицы. CREATE DATABASE javarush LC_COLLATE='ru_RU.UTF-8' LC_CTYPE='ru_RU.UTF-8' TEMPLATE = template0;
Nkls Уровень 17
7 ноября 2025
Чтобы это могло быть: SELECT CONCAT(UPPER(first_name), ' ', UPPER(last_name)) AS full_name_upper Ошибка Запрос должен преобразовывать объединённую строку в верхний регистр с помощью функции `UPPER()`.
Aleksandr Sankovskij Уровень 4
24 декабря 2025
Используй один UPPER(......)
Anemon Уровень 13 Expert
1 августа 2025
🤓
Александр Уровень 11
20 июня 2025
А как в WebStorm вывести результаты запросов в консоль? Задачи проверку проходят, но результат не видно(
20 июня 2025
В первой задаче все функции надо писать заглавными буквами - CONCAT, UPPER. В нижнем регистре не принимает, в общем полный бред. Во второй думаю также, не проверял, сразу писал заглавными.
Серега Батенин Уровень 12
21 июня 2025
не правда) что в первой что во второй задаче все писал маленькими буквами) но я решал в браузере. Возможно проблема имеет место если решать в какой нить ИДЕ) Но там помоему можно настроить, чтобы он автоматически приводил команды к верхнему регистру сам
Вячеслав Уровень 10
1 июля 2025
даже в браузере не проверяется, если написано заглавными, работает только в формате, предложенном сайтом ("правильное" решение)
Серега Батенин Уровень 12
1 июля 2025
видимо кому как везет)) я здесь все маленькими пишу и все отлично работает))
Slevin Уровень 34
31 августа 2025
Верхний регистр для команд SQL это же стандарт индустрии. Зачем потом переучиваться?
Алексей Уровень 6
3 сентября 2025
Ну скорее стандарт индустрии - это единообразный стиль во всем проекте. Либо весь sql в верхнем, либо все в нижнем регистре. У нас например в компании принято все в нижнем регистре писать. Тем более сейчас во всех редакторах есть подсветка синтаксиса и выделять ключевые слова большими буквами уже не так необходимо)