sql >> Databasteknik >  >> RDS >> Mysql

Hur man lägger till en separator till en sammanfogad sträng i MySQL – CONCAT_WS()

I MySQL, CONCAT_WS() funktionen låter dig lägga till en separator till sammanlänkade strängar. Om du bara använder CONCAT() funktion, skulle du inte ha någon avgränsare (såvida du inte uttryckligen lagt till en avgränsare som ett argument mellan varje strängargument).

En vanlig användning av CONCAT_WS() funktionen är att skapa en kommaavgränsad lista.

Här är ett exempel:

SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;

Resultat:

+------------------+
| Location         |
+------------------+
| Sydney,Australia |
+------------------+

Och du kan lägga till ett mellanslag där om du vill:

SELECT CONCAT_WS(', ','Sydney', 'Australia') AS Location;

Resultat:

+-------------------+
| Location          |
+-------------------+
| Sydney, Australia |
+-------------------+

Separatorn

Det finns inget som säger att avgränsaren måste vara ett kommatecken. Separatorn kan vara vilken sträng som helst.

Här är samma exempel som det föregående, förutom att det här använder en annan separator.

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

Resultat:

+----------------+
| Location       |
+----------------+
| Paris - France |
+----------------+

Ett databasexempel

Här är ett exempel på att hämta data från en databas och kombinera två kolumner till en, åtskilda av ett kommatecken:

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

Resultat:

+---------------------------+
| Location                  |
+---------------------------+
| Auckland, New Zealand     |
| Christchurch, New Zealand |
| Manukau, New Zealand      |
| North Shore, New Zealand  |
| Waitakere, New Zealand    |
| Wellington, New Zealand   |
| Dunedin, New Zealand      |
| Hamilton, New Zealand     |
| Lower Hutt, New Zealand   |
+---------------------------+

NULL-värden

Om något av argumenten är en NULL värde, kommer MySQL att hoppa över det värdet och dess separator, men det kommer fortfarande att bearbeta de andra.

Exempel:

SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;

Resultat:

+-----------------------+
| Location              |
+-----------------------+
| Auckland, New Zealand |
+-----------------------+

NULL-värdesseparator

Om separatorn i sig är en NULL värde, kommer sammanlänkningsoperationen att returnera NULL .

Exempel:

SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;

Resultat:

+----------+
| Location |
+----------+
| NULL     |
+----------+

Detta är en av skillnaderna mellan MySQL och T-SQL (SQL Server, Azure). I T-SQL, om separatorn är en NULL värde, är strängvärdena fortfarande sammanlänkade, men utan en separator.


  1. Sätt tomma strängar ('') till NULL i hela databasen

  2. SQL Server 2008 Vertikal data till horisontell

  3. Hur får man Insert id i MSSQL i PHP?

  4. Hur man distribuerar PostgreSQL för hög tillgänglighet