MySQL CONCAT gibt NULL für Felder zurück, die NULL enthalten: Lösungen und Alternativen
Die CONCAT-Funktion von MySQL verkettet mehrere Felder in einer einzigen Zeichenfolge. Es kann jedoch problematisch sein, wenn einige der Felder NULL-Werte enthalten, was dazu führt, dass der gesamte Ausdruck NULL zurückgibt.
Problemübersicht
Bedenken Sie die folgende Tabelle und Abfrage:
Table: devices | 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 | Query: SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name FROM devices
Diese Abfrage gibt den Gerätenamen zurück als folgt:
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL)
Lösung: Ersetzen Sie NULL durch eine leere Zeichenfolge
Um NULL-Werte zu ignorieren und stattdessen leere Zeichenfolgen zu verketten, können Sie die Funktion COALESCE verwenden. COALESCE akzeptiert mehrere Argumente und gibt das erste Nicht-NULL-Argument zurück.
Hier ist die geänderte Abfrage:
SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name FROM devices
Diese Abfrage gibt das gewünschte Ergebnis zurück:
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-
Das obige ist der detaillierte Inhalt vonWarum gibt MySQLs CONCAT NULL zurück, wenn Felder NULL-Werte enthalten, und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!