webentwicklung-frage-antwort-db.com.de

MySQL CONCAT gibt NULL zurück, wenn ein Feld NULL enthält

Ich habe folgende Daten in meiner Tabelle "Geräte"

affiliate_name  affiliate_location  model     ip             os_type    os_version 

cs1             inter               Dell     10.125.103.25   Linux      Fedora  
cs2             inter               Dell     10.125.103.26   Linux      Fedora  
cs3             inter               Dell     10.125.103.27   NULL       NULL    
cs4             inter               Dell     10.125.103.28   NULL       NULL    

Ich habe folgende Abfrage ausgeführt

SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name
FROM devices

Es gibt das unten angegebene Ergebnis zurück

cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
(NULL)
(NULL)

Wie man das so macht, dass es NULL ignorieren soll UND das Ergebnis sein soll

cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
cs3-Dell-10.125.103.27-
cs4-Dell-10.125.103.28-
133
neeraj

konvertiere die NULL Werte mit einer leeren Zeichenkette, indem du sie in COALESCE einhüllst

SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name
FROM devices
228
John Woo

Verwenden Sie stattdessen CONCAT_WS :

CONCAT_WS () überspringt keine leeren Zeichenketten. Es werden jedoch alle NULL-Werte nach dem Trennzeichen-Argument übersprungen.

SELECT CONCAT_WS('-',`affiliate_name`,`model`,`ip`,`os_type`,`os_version`) AS device_name FROM devices
114
Gerry

Um in CONCAT_WS die gleiche Flexibilität wie in CONCAT zu haben (wenn Sie beispielsweise nicht für jedes Element das gleiche Trennzeichen verwenden möchten), verwenden Sie Folgendes:

SELECT CONCAT_WS("",affiliate_name,':',model,'-',ip,... etc)
11
patrick
SELECT CONCAT(isnull(`affiliate_name`,''),'-',isnull(`model`,''),'-',isnull(`ip`,''),'-',isnull(`os_type`,''),'-',isnull(`os_version`,'')) AS device_name
FROM devices
11
Harshil

CONCAT_WS erzeugt für mich immer noch Null, wenn das erste Feld Null ist. Ich habe das gelöst, indem ich wie in eine Zeichenfolge mit der Länge Null am Anfang eingefügt habe

CONCAT_WS("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`)

jedoch

CONCAT("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) 

erzeugt Null, wenn das erste Feld Null ist.

6
Ken4Edge

sie können die folgende if-Anweisung verwenden

select CONCAT(if(affiliate_name is null ,'',affiliate_name),'- ',if(model is null ,'',affiliate_name)) as model from devices
2
Dinesh Rabara