Ich habe eine Tabelle , parcels
die zur Zeit die Spalten enthält owner_addr1
, owner_addr2
, owner_addr3
. Manchmal ist eines oder beide der beiden letztgenannten Felder leer. Ich möchte sie in einem einzigen neuen Feld kombinieren, in owner_addr
dem jedes der oben genannten Felder mit //
jedem von ihnen verknüpft ist .
Wenn jedoch eine oder mehrere der ursprünglichen Spalten NULL sind, möchte ich nicht //
mit der Ergebnisspalte verketten . So zum Beispiel, wenn owner_addr1
ist 123 4th Avenue SE
und owner_addr2
und owner_addr3
sind NULL
, dann möchte ich die Ergebnisspalte nur sein 123 4th Avenue SE
, nicht 123 4th Avenue SE // //
(was passieren würde , wenn ich gerade tat CONCAT()
mit //
zwischen den NULL - Strings ... ich nur hinzufügen möchten //
zwischen nicht NULL
Spalten oder es verlassen insgesamt aus, wenn es nur eine Nicht- NULL
Spalte gibt.
Gibt es eine einfache Möglichkeit, diese Art der bedingten Verkettung in Postgresql durchzuführen, bei der leere Zeilen weggelassen werden? Oder sollte ich dazu ein Python-Skript schreiben?
concat_ws()
(undconcat()
) FunktionsvolatilitätSTABLE
(nichtIMMUTABLE
), der deren direkte Verwendung in Ausdrucksindizes verbietet.Antworten:
Die Funktion
concat_ws()
macht genau das, was Sie wollen. Der erste Parameter wird als Klebstoff zwischen den übrigen verwendet. Nullen werden ignoriert:Prüfung:
quelle
Am offensichtlichsten ist es wahrscheinlich, eine CASE-Anweisung zu verwenden. Es gibt 4 Fälle:
Eine Alternative besteht darin, 2 CASE-Anweisungen zu verwenden:
COALESCE kann anstelle von CASE verwendet werden:
quelle
owner_addr1
nicht null ist (die Frage scheint dies zu implizieren, daher sollte es in Ordnung sein).