Coalesce Befehl

Hallo!
Ich benötigte Hilfe zum Coalesce-Befehl

Es wird richtig dargestellt:
Firma Heinrich Müller

aber wenn nur der Nachname vorhanden ist z.B. Meier GmbH, dann erscheint diese Firmenbezeichnung doppelt.

Meier GmbH & Co. KG Meier GmbH & Co. KG

COALESCE ( “Vorname”, “Nachname” ) || ’ ’ || “Nachname”

Was muss ich ändern?

Vielen Dank für eure Hilfe

COALESCE(“Vorname”, ‘’)

COALESCE ist unpassend, besser:

CONCAT_WS(' ', "Vorname", "Nachname")

:wink:

@Aton : Hast Du das einmal ausprobiert? Den Befehl CONCAT_WS gibt es weder in der internen HSQLDB noch in der internen Firebird. Deswegen ist hier die aufgezeigte Lösung die einzige, die für beide internen Datenbanken passt.

Ups, sorry! Da habe ich mich falsch erinnert.

BTW. Beim Ausprobieren mit NULL-Werten zeigt die interne HSQLDB Überraschendes:
Der Ausdruck (NULL || A) ergibt (wie in den meisten SQL-Dialekten) NULL aber concat(NULL, A) ergibt A! Das hatte ich jetzt auch nicht erwartet.
(Ich kam auf concat_ws wegen des definierten Verhaltens bei NULL-Werten und weil es mehr als zwei Parameter verträgt.)

Auch bei COALESCE können mehr als 2 Parameter angegeben werden. Das sucht einfach so lange, bis zum ersten Mal ein Eintrag nicht NULL ist.

Dass eventuell in der alten HSQLDB auch einzelne Bugs drin sind ist sicher nicht verwunderlich. Die DB ist ja bereits zu OpenOffice-Zeiten eingebaut und nicht verändert worden. CONCAT nutzt da wohl niemand, weil eben das mit nur 2 Parametern klar kommt. Da geht dann besser || (sowohl HSQLDB als auch FirebirdDB) als auch + (nur HSQLDB).

COALESCE( "Vorname", "Nachname" ) ||' '|| "Nachname"

macht ggf. den Nachnamen doppelt und fügt dazwischen ein Leerzeichen ein.

COALESCE( "Vorname" ||' ', '' ) || "Nachname"

zeigt entweder den Vornamen mit nachfolgendem Leerzeichen oder gar nichts vor dem Nachnamen an.

RobertG
November 3