SQL leere Felder in Spalte als "keine Beschreibung" anzeigen lassen?

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.

Woher ich das weiß:Berufserfahrung – Berufstätigkeit als Software-Entwickler

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.

Woher ich das weiß:Berufserfahrung – Programmierer
GreenSprite 
Fragesteller
 20.07.2022, 12:49

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:

SELECT * FROM kunden WHERE Beschreibung IS NULL AS "keine Beschreibung verfügbar"

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?

0
Suboptimierer  20.07.2022, 12:51
@GreenSprite
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
1