Aber sie nicht. NULL
ist eine Syntaxhilfe bei Verwendung als Begrenzung eines Bereichs, während -infinity
/ infinity
sind tatsächliche Werte im Bereich der Reichweite. Abstrakte Werte bedeuten kleiner/größer als jeder andere Wert, aber Werte nichtsdestotrotz (die eingeschlossen oder ausgeschlossen werden können).
Auch NULL
funktioniert für alle Bereichstyp, während die meisten Datentypen keine speziellen Werte wie -infinity
haben / infinity
. Nimm integer
und int4range
zum Beispiel.
Betrachten Sie zum besseren Verständnis den Thread in pgsql-general, der a_horse bereitgestellt :
Alle Datentyp kann NULL
sein , sogar Domänen, die ausdrücklich NOT NULL
sind . Siehe:
Dazu gehört date
, natürlich (wie Adrian kommentierte
):
test=> SELECT NULL::date, pg_typeof(NULL::date);
date | pg_typeof
------+-----------
| date
(1 row)
Aber versuchen, NULL
zu diskutieren als Wert (wenn es als Bereichsgrenze verwendet wird) ist zunächst ein irreführender Ansatz. Es ist kein Wert.
Wieder NULL
wird nicht als Wert in der Domäne des Bereichs behandelt. Es dient nur als bequeme Syntax, um zu sagen:"unbegrenzt". Nicht mehr als das.