Всем привет! Сегодня мы рассмотрим несколько способов конкатенации строк, которые можно использовать в Microsoft SQL Server на языке T-SQL.
Что такое конкатенация строк
Конкатенация – это операция соединения нескольких текстовых строк в одну.
Например, если выполнить конкатенацию двух отдельных строк «Язык» и «SQL», то получится одна строка «ЯзыкSQL».
В SQL конкатенация используется для соединения текстовых значений нескольких столбцов, или соединения значения столбца с константной строкой.
Конкатенация строк в Microsoft SQL Server
В Microsoft SQL Server на языке T-SQL мы можем использовать несколько способов для конкатенации строк, в частности два: оператор + и функцию CONCAT.
Давайте подробнее рассмотрим каждый из этих способов. Однако сначала давайте создадим тестовые данные, чтобы наглядно видеть результат работы конкатенации строк.
Заметка! Что такое T-SQL. Подробное описание для начинающих.
Исходные данные для примеров
Допустим, что у нас есть таблица, которая содержит Фамилию Имя Отчество клиентов. При этом каждую часть ФИО мы храним в отдельном столбце.
CREATE TABLE Customers ( Customer_Id INT NOT NULL IDENTITY(1,1), SurName VARCHAR(100) NULL, FirstName VARCHAR(100) NULL, Patronymic VARCHAR(100) NULL ); GO INSERT INTO Customers (SurName, FirstName, Patronymic) VALUES ('Иванов', 'Сергей', 'Иванович'), ('Попов', 'Роман', 'Алексеевич'), ('Сергеев', 'Петр', 'Вячеславович'), ('John', 'Smith', NULL), ('Oliver', 'Adamson', NULL); GO SELECT * FROM Customers;
Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.
Использование оператора +
Первый и часто используемый способ конкатенации строк в Microsoft SQL Server, который реализован уже очень давно и является, наверное, классическим – это способ с использованием оператора +.
Принцип его работы следующий: мы указываем текстовое значение, им может быть как значение из столбца, так и константное текстовое значение, после него пишем +, а затем другое текстовое значение, которое мы хотим присоединить к первому текстовому значению. И таким образом мы можем объединить несколько строк в одну строку.
Синтаксис примерно следующий
Строка1 + Строка2 + Строка3 +…… Строка n = Итоговая строка
А теперь давайте представим, что нам необходимо вывести Фамилию Имя Отчество из нашей таблицы в одной строке.
Для этого мы можем использовать оператор + и написать следующий запрос.
SELECT SurName + ' ' + FirstName + ' ' + Patronymic AS [ФИО] FROM Customers;
В данном случае после каждого столбца мы вставляем еще и пробел, для того чтобы ФИО не сливалось в одну непрерывную строку.
Как было отмечено ранее, вместо названия столбца мы можем указывать любую текстовую строку, например, следующим образом.
SELECT 'Фамилия' + 'Имя' + 'Отчество' AS [ФИО]
Вы наверняка заметили, что в первом примере у некоторых строк результирующего набора данных у нас выводится значение NULL. Это происходит потому, что в некоторых записях нашей таблицы нет значений, т.е. в них хранится NULL, в частности у записей с идентификаторами 4 и 5.
А оператор + в случае соединения нормального значения со значением NULL будет возвращать NULL. Иными словами, если в любой из строк, которые мы соединяем с помощью оператора +, будет NULL, то результат всей конкатенации также будет NULL. И это является одним из главных недостатков данного способа конкатенации строк в T-SQL.
Конечно же, мы можем легко устранить данную проблему, обернув столбец, например, функцией ISNULL, которая возвращает значение второго параметра, если значение первого NULL.
Заметка! Функции COALESCE и ISNULL в T-SQL – особенности и основные отличия.
Таким образом, чтобы предотвратить появление NULL значений в нашем запросе, мы можем с помощью функции ISNULL проверять значения столбцов и, если там NULL, выводить просто пусто.
SELECT ISNULL(SurName,'') + ' ' + ISNULL(FirstName,'') + ' ' + ISNULL(Patronymic,'') AS [ФИО] FROM Customers;
Как видим, в данном случае результат уже более корректен.
Использование функции CONCAT
Вторым способом конкатенации строк в Microsoft SQL Server является способ с использованием функции CONCAT.
CONCAT – функция SQL, которая соединяет несколько текстовых значений в одну строку, другими словами, выполняет конкатенацию строк.
В данной функции уже реализована проверка на NULL, и нам не требуется самостоятельно проверять столбец на наличие таких значений и пропускать все значения столбца через функцию ISNULL.
Однако данная функция появилось лишь в 2012 версии SQL Server, т.е. до 2012 версии можно использовать только оператор +.
Принцип работы функции CONCAT следующий: она объединяет все параметры, которые мы передаем в эту функцию, в одну строку. Параметров можно передавать несколько, а в качестве них можно указывать как константную строку, т.е. просто текст, так и столбец таблицы.
Давайте напишем SQL запрос, который будет эквивалентен нашему предыдущему запросу.
SELECT CONCAT(SurName, ' ', FirstName, ' ', Patronymic) AS [ФИО] FROM Customers;
Как видим, результат точно такой же.
Заметка! Курсы по Transact-SQL для начинающих.
На сегодня это все, надеюсь, материал был Вам полезен, пока!
я бы добавил сюда еще CONCAT_WS
select CONCAT_WS(‘; ‘,’Value1′,’Value2′,’Value3’) as Value