Mais ils ne le font pas. NULL
est une confort de syntaxe lorsqu'il est utilisé comme limite d'une plage, tandis que -infinity
/ infinity
sont des valeurs réelles dans le domaine de la gamme. Valeurs abstraites signifiant inférieures/supérieures à toute autre valeur, mais valeurs néanmoins (qui peut être inclus ou exclu).
Aussi, NULL
fonctionne pour tous type de plage, alors que la plupart des types de données n'ont pas de valeurs spéciales comme -infinity
/ infinity
. Prendre integer
et int4range
par exemple.
Pour une meilleure compréhension, considérez le fil dans pgsql-general qui un_cheval fourni :
Tous le type de données peut être NULL
, même les domaines qui sont explicitement NOT NULL
. Voir :
Cela inclut date
, bien sûr (comme Adrian a commenté
):
test=> SELECT NULL::date, pg_typeof(NULL::date);
date | pg_typeof
------+-----------
| date
(1 row)
Mais essayer de discuter de NULL
comme valeur (lorsqu'il est utilisé comme limite d'une plage) est une approche trompeuse pour commencer. Ce n'est pas une valeur.
Encore une fois, NULL
n'est pas traitée comme une valeur dans le domaine de la plage. Il sert simplement de syntaxe pratique pour dire :"illimité". Pas plus que ça.