PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi PostgreSQL considère-t-il que les limites NULL dans les types de plage sont distinctes des limites infinies ?

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.