В SQL Server и Azure, ако трябва да свържете два или повече низа, можете да използвате T-SQL CONCAT()
функция. Както при всяка основна операция на конкатенация, тази функция свързва низовете заедно, от край до край.
Но какво ще стане, ако трябва да добавите разделител между всеки низ?
Например, може да искате да направите разделен със запетая списък с низове. В този случай бихте искали да вмъкнете запетая между всеки низ. Като това:
Paris, France
Вместо това:
ParisFrance
За щастие T-SQL предоставя CONCAT_WS()
функция, която ви помага да направите точно това. CONCAT_WS()
функцията работи точно като CONCAT()
функция, с изключение на това, че приема допълнителен аргумент – разделителя, който искате да използвате.
Ето един пример:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Резултат:
Location ------------ Paris,France
И можете да добавите интервал там, ако искате:
SELECT CONCAT_WS(', ','Paris', 'France') AS Location;
Резултат:
Location ------------ Paris,France
Разделителят
Няма какво да се каже, че разделителят трябва да е запетая. Разделителят може да бъде израз от произволен тип символ (char
, nchar
, nvarchar
или varchar
).
Ето същия пример като предишния, с изключение на това, че този използва различен разделител.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Резултат:
Location -------------- Paris - France
Пример за база данни
Ето пример за извличане на данни от база данни и комбиниране на две колони в една, разделени със запетая:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = 'THA';
Резултат:
Location --------------------------- Bangkok, Thailand Nonthaburi, Thailand Nakhon Ratchasima, Thailand Chiang Mai, Thailand Udon Thani, Thailand Hat Yai, Thailand Khon Kaen, Thailand Pak Kret, Thailand Nakhon Sawan, Thailand Ubon Ratchathani, Thailand Songkhla, Thailand Nakhon Pathom, Thailand
NULL стойности
Ако някой от аргументите е NULL
стойност, SQL Server ще пропусне тази стойност и нейния разделител, но все пак ще обработи останалите.
Пример:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
Резултат:
Location ------------ Paris,France
Разделител на стойности NULL
Ако самият разделител е NULL
стойност, операцията на конкатенация все още ще се изпълнява, но без разделител.
Пример:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
Резултат:
Location ----------- ParisFrance
Това е една от разликите между T-SQL и MySQL (MySQL също има CONCAT_WS()
функция). В MySQL, ако разделителят е NULL
стойност, конкатенацията води до NULL
стойност.