sql >> Database >  >> RDS >> PostgreSQL

Waarom beschouwt PostgreSQL NULL-grenzen in bereiktypen als verschillend van oneindige grenzen?

Maar dat doen ze niet. NULL is een syntaxis gemak wanneer gebruikt als begrenzing van een bereik, terwijl -infinity / infinity zijn werkelijke waarden in het domein van het assortiment. Abstracte waarden betekenen kleiner/groter dan elke andere waarde, maar waarden niettemin (die kan worden opgenomen of uitgesloten).

Ook NULL werkt voor elke bereiktype, terwijl de meeste gegevenstypen geen speciale waarden hebben zoals -infinity / infinity . Neem integer en int4range bijvoorbeeld.

Overweeg voor een beter begrip de thread in pgsql-general die een_paard geleverd :

Elke gegevenstype kan NULL zijn , zelfs domeinen die expliciet NOT NULL zijn . Zie:

Dat omvat date , natuurlijk (zoals Adrian heeft gereageerd ):

test=> SELECT NULL::date, pg_typeof(NULL::date);
 date | pg_typeof 
------+-----------
      | date
(1 row)

Maar proberen om NULL te bespreken als waarde (wanneer gebruikt als grens van een bereik) is om te beginnen een misleidende benadering. Het is geen waarde.

Nogmaals, NULL wordt niet behandeld als waarde in het domein van het bereik. Het dient gewoon als handige syntaxis om te zeggen:"onbegrensd". Niet meer dan dat.




  1. Hoe dynamisch waarden in Tomcat's Context XML-bestand te laden

  2. Spring-Hibernate met behulp van meerdere gegevensbronnen/databases

  3. Waarom zou Oracle.ManagedDataAccess niet werken als Oracle.DataAccess dat wel doet?

  4. Oracle SQL converteert de datumnotatie van DD-Mon-YY naar YYYYMM