Prüfen Sie, ob eine Postgres-composite-Feld ist null/leer
Mit postgres-composite-Typen können Sie im Grunde machen erstellen Sie ein Feld mit der Struktur, die definiert wird als eine andere Tabelle. Ich habe das zusammengesetzte Feld "Empfänger" des Typs "person". Das Empfänger-Feld oft leer in meinem speziellen Szenario. Was ist der richtige Weg, um zu überprüfen, ob Sie eine composite-Feld leer ist. Ich habe versucht:
select * from bla where recipient is not null
select * from bla where recipient is null
select * from bla where recipient = null
select * from bla where recipient != null
In allen diesen Fällen spielt es keine Rückkehr, nichts. So wie Sie richtig prüfen Sie, ob ein composite-Wert leer ist oder nicht?
UPDATE
Nachdem einige mehr Lesen, es sieht aus wie das ist mein problem:
Kann man denken, dass
!(x IS NULL) = x IS NOT NULL
ist wahr in allen Fällen. Aber es gibt eine Ausnahme - composite-Typen. Wenn ein Feld ein zusammengesetzter Wert istNULL
- und ein weiteres Feld istNOT NULL
dann Folge, dass beide Operatoren falsch ist.IS NULL
ist wahr, nur wenn Sie alle FelderNULL
.IS NOT NULL
ist wahr, nur wenn Sie alle FelderNOT NULL
. Für alle Fälle dazwischen, dann sind beide Operatoren den Wert false zurück.
Habe ich einige Felder, die null sind, und andere, die es nicht sind. Ich hatte gehofft, dass das Feld, das wäre als NICHT NULL, wenn ein Element in das zusammengesetzte Feld nicht null ist... nicht, wenn ALLE von Ihnen sind nicht null. Gibt es eine Möglichkeit, um dieses über die Prüfung jedes Feld?
InformationsquelleAutor der Frage coderama | 2014-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
IS NULL
undIS NOT NULL
Arbeit für komplexe Typen zu, so sind diese beiden sollte angemessen sein:InformationsquelleAutor der Antwort Mureinik
Fangen Fällen, in denen nicht alle Felder der composite Wert (Zeile /Datensatz) NULL sind:
<row-type> is NULL
gibt nurTRUE
wenn alle Felder sindNULL
.<row-type> is NOT NULL
gibt nurTRUE
wenn alle Felder sindNOT NULL
.Klammern sind optional. Rangfolge der arbeiten zu unseren Gunsten sowieso.
Tests Zeile /Datensatz für NULL -
Demonstriert die verschiedenen Optionen:
Ergebnis:
SQL Fiddle.
Verwandte:
InformationsquelleAutor der Antwort Erwin Brandstetter