sql >> Databáze >  >> RDS >> Sqlserver

Jak přidat oddělovač do zřetězeného řetězce na serveru SQL – CONCAT_WS()

Pokud v SQL Server a Azure potřebujete zřetězit dva nebo více řetězců, můžete použít T-SQL CONCAT() funkce. Stejně jako u každé základní operace zřetězení tato funkce spojuje řetězce dohromady, od konce ke konci.

Ale co když potřebujete přidat oddělovač mezi každý řetězec?

Můžete například chtít vytvořit seznam řetězců oddělených čárkami. V tomto případě byste chtěli mezi každý řetězec vložit čárku. Takhle:

Paris, France

Místo toho:

ParisFrance

Naštěstí T-SQL poskytuje CONCAT_WS() funkce, která vám pomůže přesně to udělat. CONCAT_WS() funkce funguje stejně jako CONCAT() funkce, kromě toho, že vyžaduje další argument – ​​oddělovač, který byste chtěli použít.

Zde je příklad:

SELECT CONCAT_WS(',','Paris', 'France') AS Location;

Výsledek:

Location    
------------
Paris,France

A můžete tam přidat mezeru, pokud chcete:

SELECT CONCAT_WS(', ','Paris', 'France') AS Location;

Výsledek:

Location     
-------------
Paris, France

Oddělovač

Nic neříká, že oddělovač musí být čárka. Oddělovač může být výraz libovolného typu znaků (charncharnvarchar nebo varchar ).

Zde je stejný příklad jako předchozí, ale tento používá jiný oddělovač.

SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;

Výsledek:

Location      
--------------
Paris - France

Příklad databáze

Zde je příklad načítání dat z databáze a spojení dvou sloupců do jednoho, odděleného čárkou:

SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location
FROM city
INNER JOIN country ON
city.CountryCode = country.Code
WHERE country.Code = 'THA';

Výsledek:

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

Hodnoty NULL

Pokud je některý z argumentů NULL hodnotu, SQL Server tuto hodnotu a její oddělovač přeskočí, ale ostatní zpracuje.

Příklad:

SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;

Výsledek:

Location     
-------------
Paris, France

Oddělovač hodnot NULL

Pokud je samotný oddělovač NULL hodnota, operace zřetězení bude stále provedena, ale bez oddělovače.

Příklad:

SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;

Výsledek:

Location   
-----------
ParisFrance

Toto je jeden z rozdílů mezi T-SQL a MySQL (MySQL má také CONCAT_WS() funkce). V MySQL, pokud je oddělovač NULL výsledkem zřetězení je NULL hodnotu.


  1. Jak vytvořit databázové tabulky pomocí SQL

  2. Změna typu sloupu na delší řetězce v kolejnicích

  3. Existuje v některých verzích Oracle limit vnoření pro korelované poddotazy?

  4. 12c Adaptivní plány