Большинство функций в DB Browser содержат всплывающие подсказки, которые очень полезны для определения
Практические задания
• Функция UPPER() принимает только один аргумент (X). Сколько аргументов принимает функция REPLACE()?
• Прочитайте всплывающую подсказку (на экране в DB Browser) и объясните, как работает функция TRIM().
Внимание
Если всплывающая подсказка не появилась, убедитесь, что вы правильно набираете функцию. Подсказка не появится, если вы просто скопируете и вставите функцию и открытую скобку. Это еще одна причина, по которой всегда необходимо вводить запросы вручную. Никаких ускоренных методов!
Управление текстовыми данными с помощью строковых функций
НАПОМИНАНИЕ
Для символьных данных фиксированной длины (например, почтовых индексов, содержащих буквы) можно использовать другой тип данных — с фиксированной длиной. Однако в базе данных sTunes символьный тип данных NVARCHAR используется для всех текстовых данных.
Возможность манипулировать текстовыми строками важна, так как поля в базе данных не всегда организованы удобно для нас. Допустим, нас попросили создать список рассылки по клиентам из США. Для этого необходимо получить имена и адреса клиентов. Используем оператор SELECT.
SELECT
FirstName,
LastName,
Address
FROM
customers
WHERE
Country = 'USA'
При выполнении запроса получим следующий результат:
Рис. 87
Однако возникают некоторые проблемы. Данные адреса разбиты на части. Просто запросить поле адреса недостаточно. Нам также необходимо выбрать поля City, State и PostalCode. Другая проблема: все эти данные содержатся в отдельных полях. Если необходимо создать простой список рассылки, где каждая строка представляет собой полное имя и адрес клиента, то для этой цели полученный шаблон не годится.
Практическое задание
• Попробуйте скопировать результат последнего запроса из DB Browser в текстовый редактор. Что вы видите?
К счастью, для манипулирования текстовыми строками существует несколько отличных инструментов, так что мы можем получить результат в удобном для нас виде. Рассмотрим первый из этих инструментов — конкатенацию.
Конкатенация строк
Конкатенация — объединение двух или более строк. Для слияния двух полей вместе используется символ ||. Например, следующий код выполняет объединение полей FirstName и LastName.
SELECT
FirstName || LastName
FROM
customers
WHERE
CustomerId = 1
Получится следующий результат:
Рис. 88
Оператор конкатенации || просто соединил оба поля вместе без пробелов. Для удобства чтения мы можем последовательно использовать две конкатенации и заключить пробел в одинарные кавычки. Тогда запрос будет выглядеть следующим образом:
SELECT
FirstName,
LastName,
FirstName || ' ' || LastName
FROM
customers
WHERE
Country = "USA"
При выполнении запроса получим следующий результат:
Рис. 89
Практическое задание
• Сделайте результаты вывода более читабельными, создав псевдоним FullName для нашего объединенного поля.
Примечание
Функция конкатенации || не похожа на остальные функции, которые мы будем рассматривать в этой главе. В других реализациях SQL существует функция CONCAT() или используется символ +. Синтаксис может отличаться в зависимости от того, какую РСУБД вы используете, но эффект будет одинаковым.
Рассмотрим следующий пример, где для создания в одной строке имени и адреса клиента используется множественная конкатенация.
SELECT
FirstName || ' ' || LastName || ' ' || Address
|| ', ' || City || ', ' || State || ' ' ||
PostalCode AS [MailingAddress]
FROM
customers
WHERE
Country = "USA"
При выполнении запроса получим следующий результат:
Рис. 90
Практическое задание
• После выполнения запроса скопируйте полученный в DB Browser результат в текстовый редактор. Он будет намного читабельнее, чем до выполнения конкатенации.
Примечание
Пробелы между символами || не обязательны. В предыдущем примере, чтобы получить желаемый формат, мы использовали запятую, а затем пробел. Вы можете добавить любой текст, поместив его в кавычки.
Обрезка строки
С помощью функций мы также можем вырезать из текста определенное количество символов. Из приведенного выше примера видно, что почтовые индексы США в таблице customers не единообразны. Некоторые из них содержат дефис и дополнительный четырехзначный номер, который почтовая служба США называет кодом ZIP +4. В одном из почтовых индексов отсутствует четвертая цифра почтового кода ZIP +4.
На мой взгляд,