Тип данных для NULL
не имеет смысла, как тип данных для 0
: это может быть INTEGER
, FLOAT
или VARCHAR
. Вы не можете сказать это только по значению.
NULL
является допустимым значением почти в каждой области типов данных, что означает отсутствие фактического значения.
Также бессмысленно обсуждать типы данных вне контекста некоторых RDBMS
.
В SQLite
, например, типы данных привязаны к значениям, а не к столбцам, а NULL
является типом данных первого класса как таковым.
В Oracle
типы данных определены более строго. Например, этот запрос работает:
SELECT COALESCE(dt, i)
FROM (
SELECT CAST(NULL AS DATE) AS dt, CAST(NULL AS DATE) i
FROM dual
) q
и это не так:
SELECT COALESCE(dt, i)
FROM (
SELECT CAST(NULL AS DATE) AS dt, CAST(NULL AS NUMBER) i
FROM dual
) q
, поскольку последний запрос возвращает два столбца разных типов данных, каждый из которых имеет значения NULL
, а COALESCE
требует, чтобы оба аргумента имели одинаковый тип данных.
Лучше сказать, что NULL
любого типа данных может быть неявно преобразовано в NULL
для другого типа данных.
Например, VARCHAR
может быть неявно преобразовано в INTEGER
, если оно имеет значение 0
, но не может, если оно имеет значение 'some_string'
.
Для NULL
любой тип данных может быть неявно преобразован в любой другой тип данных, если неявное преобразование между ними вообще разрешено.