MySQL SELECT AS kombiniert zwei Spalten zu einer

76

Mit dieser Lösung habe ich versucht, COALESCE als Teil einer MySQL-Abfrage zu verwenden, die mit SELECT As in eine CSV-Datei ausgegeben wird, um die Spaltennamen beim Exportieren der Daten zu benennen.

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , ContactPhoneAreaCode1
     , ContactPhoneNumber1
     , COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

Ich wollte 3 Spalten: Vorname, Nachname und Kontakttelefon

Ich erhalte 5 Spalten: Vorname, Nachname, ContactPhoneAreaCode1, ContactPhoneNumber1 und Contact_Phone

Wie verstecke ich das Zusammenführen von ContactPhoneAreaCode1, ContactPhoneNumber1 in einer einzelnen Spalte für Contact_Phone innerhalb der Abfrage?

Rocco Der Taco
quelle
2
Lassen Sie einfach die Spalten, die Sie nicht sehen möchten, in Ihrer Abfrage.
Ryan
4
COALESCEGibt das erste Nicht-Null-Feld zurück. Wenn ContactPhoneAreaCode1 nicht null ist, entspricht Contact_Phone ContactPhoneAreaCode1. Sie möchten die FunktionCONCAT
Chrislondon

Antworten:

148

Wenn beide Spalten enthalten NULLkönnen, Sie sie aber dennoch zu einer einzigen Zeichenfolge zusammenführen möchten, ist die einfachste Lösung die Verwendung von CONCAT_WS () :

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT_WS('', ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

Auf diese Weise müssen Sie nicht NULLjede Spalte einzeln auf -ness prüfen .

Wenn beide Spalten tatsächlich als definiert sind NOT NULL, reicht CONCAT () aus:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

Was das angeht COALESCE, ist es ein etwas anderes Biest: Angesichts der Liste der Argumente wird das erste zurückgegeben, das nicht vorhanden ist NULL.

raina77ow
quelle
Wie können Sie Leerzeichen in CONCAT_WS einfügen? Durch Hinzufügen ' 'funktioniert das nicht.
Pathros
Funktioniert im Terminal einwandfrei. Überprüfen Sie, wie die Abfrage an MySQL Server übergeben wird und wie die Ergebnisse verarbeitet werden.
raina77ow
1
Ahh ja. Vielen Dank. Ich habe den Platz nicht ' 'am Anfang gesetzt, sondern zwischen den Spalten :-P
Pathros
8

Sie müssen ContactPhoneAreaCode1 und ContactPhoneNumber1 nicht auflisten

SELECT FirstName AS First_Name, 
LastName AS Last_Name, 
COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
FROM TABLE1
gesungen
quelle
6

Sie müssen die Spalten nicht separat auswählen, um sie in Ihrem CONCAT zu verwenden. Entfernen Sie sie einfach und Ihre Anfrage wird:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1
GamerJosh
quelle
2
Ich denke, Sie wollen CONCAT
chrislondon
2

Im Fall von NULLSpalten ist es besser , zu verwenden IFKlausel wie diese , die die beiden Funktionen kombinieren: CONCATund COALESCEund verwendet Sonderzeichen zwischen den Spalten in Folge wie Raum oder ‚_‘

SELECT FirstName , LastName , 
IF(FirstName IS NULL AND LastName IS NULL, NULL,' _ ',CONCAT(COALESCE(FirstName ,''), COALESCE(LastName ,''))) 
AS Contact_Phone FROM   TABLE1
Ganji
quelle