Ale oni nie. NULL
jest wygodą składni gdy jest używany jako granica zakresu, podczas gdy -infinity
/ infinity
są rzeczywistymi wartościami w domenie zakresu. Abstrakcyjne wartości oznaczają mniejsze/większe niż jakakolwiek inna wartość, ale wartości niemniej jednak (co można włączyć lub wyłączyć).
Również NULL
działa dla każdego typ zakresu, podczas gdy większość typów danych nie ma specjalnych wartości, takich jak -infinity
/ infinity
. Weź integer
i int4range
na przykład.
Aby lepiej zrozumieć, rozważ wątek w pgsql-general, który podano a_konia :
Każdy typ danych może być NULL
, nawet domeny, które są jawnie NOT NULL
. Zobacz:
Obejmuje to date
, oczywiście (jak Adrian skomentował
):
test=> SELECT NULL::date, pg_typeof(NULL::date);
date | pg_typeof
------+-----------
| date
(1 row)
Ale próbuję omówić NULL
jako wartość (gdy jest używany jako granica zakresu) jest podejściem wprowadzającym w błąd. To nie jest wartość.
Ponownie, NULL
nie jest traktowana jako wartość w domenie zakresu. Służy tylko jako wygodna składnia do powiedzenia:„bez ograniczeń”. Nic więcej.