Предикат неверного вещественного значения
Функция
Определение проверки на 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;