Предикат неверного вещественного значения
Функция
Определение проверки на NaN-значение.
Спецификация
::=Общие правила
-
Значение NaN (Not a number – не число) применимо для вещественных чисел (REAL, DOUBLE) и обозначает результат некорректной арифметической операции (типа деления ноля на ноль или бесконечность).
0*∞=NaN 0/0=NaN ∞/∞=NaN +X/0=NaN -+X/0=NaN (x – положительное вещественное число)
-
При сортировке NaN-значения считаются наибольшими из всех определенных вещественных чисел (NULL-значение не является определенным числом).
-
Любые операции над NaN-значением в качестве результата дают другое NaN-значение.
-
<Значимое выражение>не должно быть <запросом выборки>. -
Конструкция
'<значимое выражение> IS NaN'имеет одно из двух значений: истина (TRUE) или ложь (FALSE). -
Конструкция
'<значимое выражение> IS NaN'истинна только тогда, когда<значимое выражение>имеет NaN-значение. -
Конструкция
'<значимое выражение> IS NOT NaN'эквивалентна'NOT (<значимое выражение> IS NaN)'. -
Утилиты СУБД ЛИНТЕР NaN-значения выводят на экран в виде символьных значений следующего вида:
-
+INF: положительная бесконечность;
-
-INF: отрицательная бесконечность;
-
IND: неопределенность;
-
NaN: не число.
-
Пример
create or replace table test(d double);
insert into test select
cast(HEXTORAW('000000000000F0FF0000000000000000')) as double;
insert into test values(1.1);
insert into test values(2.2);
insert into test values(3.3);
insert into test;
insert into test select
cast(HEXTORAW('000000000000F07F0000000000000000')) as double;
insert into test select
cast(HEXTORAW('000000000000F8FF0000000000000000')) as double;
create index d on test;
select * from test order by d;
select * from test where d is NaN;
select * from test where d is NOT NaN;