sql >> Database >  >> RDS >> Sqlserver

String- en NULL-waarden samenvoegen in SQL Server

Probleem:

U wilt NULL's samenvoegen met tekenreekswaarden uit een andere kolom in SQL Server.

Voorbeeld:

Onze database heeft een tabel met de naam children met gegevens in de volgende kolommen:id (primaire sleutel), voornaam , middle_name , en achternaam .

id voornaam middle_name achternaam
1 Linda NULL Jackson
2 Maria Alice Thomson
3 NULL Steven NULL
4 NULL NULL Bruin

We willen de voornaam van de ene kolom, de middelste naam van de volgende kolom en de achternaam van de laatste kolom als één tekenreeks weergeven, zelfs als een van de kolommen een NULL opslaat.

Oplossing 2:

We gebruiken de CONCAT() functie. Dit is de vraag die je zou schrijven:

SELECT 
  CONCAT(first_name,  middle_name, last_name) AS name
FROM children;

Hier is het resultaat:

naam
LindaJackson
MaryAliceThomson
Steven
Bruin

Discussie:

Gebruik de CONCAT() functie om tekenreekswaarden samen te voegen uit expressies of kolommen die een NULL bevatten. Deze functie neemt een lijst met tekenreeksen (of NULL's) en geeft al deze waarden in één tekenreeks weer. Er is geen scheidingsteken tussen de waarden, dus de resultaten (zoals in ons voorbeeld) zijn mogelijk niet opgemaakt zoals u zou verwachten. Hoe kunnen we dit corrigeren? Kijk naar een andere CONCAT() vraag:

Oplossing 2:

Hier is nog een vraagoptie:

SELECT 
  CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name
FROM children;

Hier is het resultaat:

naam
Linda Jackson
Mary Alice Thomson
Steven
Bruin

Nu neemt deze functie, afgezien van stringwaarden, ook enkele spaties in (geplaatst tussen de aaneengeschakelde waarden). Dit scheidt het ene deel van de naam van het andere. Maar zoals we zien, is deze oplossing ook niet ideaal; volledige namen zonder middelste namen hebben een extra spatie, terwijl de records met slechts één naam twee extra spaties hebben.

In dit geval is de CONCAT_WS() functie is de betere oplossing.

Oplossing 3:

De CONCAT_WS() functie heeft een extra eerste argument nodig:een teken dat dient als scheidingsteken tussen strings. Dit is de vraag:

SELECT 
  CONCAT_WS(' ' , first_name, middle_name, last_name) AS name
FROM children;

En het resultaat:

naam
Linda Jackson
Mary Alice Thomson
Steven
Bruin

Deze zoekopdracht toont de volledige namen van de kinderen, zonder onnodige spaties.


  1. Hoe MySQL op CentOS 6 te installeren

  2. Hoe kan ik een SQL Server-database op dezelfde server klonen in SQL Server 2008 Express?

  3. Automatisch e-mailsysteem om databaseoverzichtsrapport te verzenden

  4. Kan geen verbinding maken met MySQL-server op 'localhost' (10061)