Конкатенация строк в T-SQL. Способы используемые в Microsoft SQL Server

Всем привет! Сегодня мы рассмотрим несколько способов конкатенации строк, которые можно использовать в Microsoft SQL Server на языке T-SQL.

Конкатенация строк в T-SQL. Способы используемые в Microsoft SQL Server

Что такое конкатенация строк

Конкатенация – это операция соединения нескольких текстовых строк в одну.

Например, если выполнить конкатенацию двух отдельных строк «Язык» и «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;

Скриншот 1

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.

Использование оператора +

Первый и часто используемый способ конкатенации строк в Microsoft SQL Server, который реализован уже очень давно и является, наверное, классическим – это способ с использованием оператора +.

Принцип его работы следующий: мы указываем текстовое значение, им может быть как значение из столбца, так и константное текстовое значение, после него пишем +, а затем другое текстовое значение, которое мы хотим присоединить к первому текстовому значению. И таким образом мы можем объединить несколько строк в одну строку.

Синтаксис примерно следующий

   
   Строка1 + Строка2 + Строка3 +…… Строка n = Итоговая строка

А теперь давайте представим, что нам необходимо вывести Фамилию Имя Отчество из нашей таблицы в одной строке.

Для этого мы можем использовать оператор + и написать следующий запрос.

   
   SELECT SurName + ' ' + FirstName + ' ' + Patronymic AS [ФИО]
   FROM Customers;

Скриншот 3

В данном случае после каждого столбца мы вставляем еще и пробел, для того чтобы ФИО не сливалось в одну непрерывную строку.

Как было отмечено ранее, вместо названия столбца мы можем указывать любую текстовую строку, например, следующим образом.

   
   SELECT 'Фамилия' + 'Имя' + 'Отчество' AS [ФИО]

Скриншот 3

Вы наверняка заметили, что в первом примере у некоторых строк результирующего набора данных у нас выводится значение 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;

Скриншот 4

Как видим, в данном случае результат уже более корректен.

Использование функции CONCAT

Вторым способом конкатенации строк в Microsoft SQL Server является способ с использованием функции CONCAT.

CONCAT – функция SQL, которая соединяет несколько текстовых значений в одну строку, другими словами, выполняет конкатенацию строк.

В данной функции уже реализована проверка на NULL, и нам не требуется самостоятельно проверять столбец на наличие таких значений и пропускать все значения столбца через функцию ISNULL.

Однако данная функция появилось лишь в 2012 версии SQL Server, т.е. до 2012 версии можно использовать только оператор +.

Принцип работы функции CONCAT следующий: она объединяет все параметры, которые мы передаем в эту функцию, в одну строку. Параметров можно передавать несколько, а в качестве них можно указывать как константную строку, т.е. просто текст, так и столбец таблицы.

Давайте напишем SQL запрос, который будет эквивалентен нашему предыдущему запросу.

   
   SELECT CONCAT(SurName, ' ', FirstName, ' ', Patronymic) AS [ФИО]
   FROM Customers;

Скриншот 5

Как видим, результат точно такой же.

Заметка! Курсы по Transact-SQL для начинающих.

На сегодня это все, надеюсь, материал был Вам полезен, пока!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Комментарии: 1
  1. NoName

    я бы добавил сюда еще CONCAT_WS

    select CONCAT_WS(‘; ‘,’Value1′,’Value2′,’Value3’) as Value

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.