SQL leere Felder in Spalte als "keine Beschreibung" anzeigen lassen?
Hallo zusammen,
ich mache gerade in SQL eine SELECT Abfrage um mir eine Tabelle in der Konsole anzeigen zu lassen. Nun wollte ich in der Spalte "Beschreibung" alle Felder, die leer sind, mir durch den Text "keine Beschreibung verfügbar" anzeigen lassen.
Dabei will ich die leeren Felder nicht direkt in der Tabelle durch REPLACE ersetzen, sondern die leeren Felder lediglich als "keine Beschreibung verfügbar" in der Abfrage/Konsole anzeigen lassen.
Hat jemand eine Idee? Wie würde der code hierzu lauten?
Bin für jede Antwort sehr dankbar.
Viele Grüße
4 Antworten
Coalesce(nullif(Spaltenname, ''), Feldname, 'keine Beschreibung verfügbar')
Damit fängst du zwei Dinge ab:
- Das Feld ist NULL
- Das Feld ist leer
Das ist die Variante für Transact-SQL, wie es bei Microsoft SQL Server verwendet wird.
Je nach Dialekt musst du es eventuell anpassen
Das Sprachmittel der Wahl dürfte in den meisten SQL-Systemen die If-Anweisung sein.
Leider ist mir nicht völlig klar, was Du mit der Formulierung "Felder, die leer sind" genau meinst. Wenn ein leeres Feld mit einem NULL-Wert gekennzeichnet ist, sollte gehen:
SELECT IF ISNULL(Beschreibung)
THEN "keine Beschreibung verfügbar"
ELSE Beschreibung
FROM tabelle;
Falls ein leeres Feld eine Zeichenreihe enthält, die nur Leerzeichen enthält, könnte in manchen SQL-Systemen gehen:
SELECT IF TRIM(Beschreibung) =""
THEN "keine Beschreibung verfügbar"
ELSE Beschreibung
FROM tabelle;
Das ist aber wohl keine sehr portierbare Lösung, weil die die Funktion Trim (die führende und nachfolgende Leerzeichen entfernt) nicht überall implementiert ist.
Wie schon erwähnt, die Basis ist, dass leere Felder NULL enthalten, sonst wird es schwieriger. Dann kannst auch einfach ISNULL verwenden.
Generell ist es aber Sache es Clients, also des entsprechenden Programmes, solcherlei anzuwenden. Die Datenbank liefert in der Regel nur die Daten.
Wenn du mit "leer" NULL meinst, kannst du mit COALESCE arbeiten.
Ansonsten haben die verschiedenen Dialekte meistens so etwas wie CASE WHEN.
select spalte1, ..., spalteN, coalesce(Beschreibung, 'keine Beschreibung') from kunden where Beschreibung is NULL
In dem Fall würe reichen:
select spalte1, ..., spalteN, 'keine Beschreibung' from kunden where Beschreibung is NULL
Danke für den Tipp. Leider bin ich totaler Anfänger und bin mit COALESCE etwas überfordert. Ich hatte eigentlich gedacht, dass es mit einer Abfrage in der Art von:
oder sowas in die Richtung gehen würde. Leider funktioniert die Abfrage, wie ich es mir schon gedacht habe, nicht. Hast du eventuell einen code parat, der das erledigen würde?