Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да добавите разделител към конкатениран низ в SQL Server – CONCAT_WS()

В 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

Разделителят

Няма какво да се каже, че разделителят трябва да е запетая. Разделителят може да бъде израз от произволен тип символ (charncharnvarchar или 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 стойност.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да извикам съхранена процедура с аргументи, използвайки sqlcmd.exe?

  2. Как да генерирате DDL скриптове (Създаване) от SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 17

  3. Как да заменя няколко знака в SQL?

  4. Ограничение на клаузата IN в Sql Server

  5. Статистика за обекти на базата данни на SQL Server