Замена NaN-значения правильным значением
Функция
Замена неверного вещественного значения (NaN-значения) правильным.
Спецификация
< синтаксис >
::=
NANVL(выражение1, выражение2)
Общие правила
-
< Выражение1 >
,< выражение2 >
должны быть вещественными значениями (типа REAL, DOUBLE) или приводиться к нему.
Общие правила
-
Если
< выражение1 >
имеет значение NaN или +/- INFINITY, функция возвращает значение< выражения2 >
, в противном случае – значение< выражения1 >
. -
Данная функция эквивалентна конструкции СУБД ЛИНТЕР:
CASE WHEN < выражение1 > IS NOT NAN THEN < выражение 1 > ELSE < выражение2 >;
-
Аргументы могут быть заданы
< SQL-параметром >
, который должен содержать спецификацию типа данных параметра.select nanvl(cast HEXTORAW(? (char(30))) as double, ? (real)); 000000000000F8FF0000000000000000 0.097 | 0.0970000028610229|
Примеры
create or replace table test( r1 real, r2 real ); insert into test values(1.1,1.1); insert into test; insert into test select cast( HEXTORAW('0000C0FF00000000') ) as real, 2.2; insert into test select 2.2, cast( HEXTORAW('0000807F00000000') ) as real; insert into test select cast( HEXTORAW('0000C0FF00000000') ) as real, cast( HEXTORAW('0000C0FF00000000') ) as real; insert into test select cast( HEXTORAW('000080FF00000000') ) as real, cast( HEXTORAW('000080FF00000000') ) as real; insert into test values(3.3,3.3); insert into test(r2) select cast( HEXTORAW('0000807F00000000') ) as real; insert into test(r1) select cast( HEXTORAW('0000807F00000000') ) as real; insert into test(r2) values (5.5); insert into test(r1) values (5.5); select * from test order by r1; |R1 |R2 | |1.1 |1.1 | |2.2 |inf | |3.3 |3.3 | |5.5 | | |-nan |2.2 | |-nan |-nan | |-inf |-inf | |inf | | | | | | |inf | | |5.5 |
select sum(r1), sum(nanvl(r1, 0)), count(r2) from test where r2 is not nan and r2 is not null; | -nan | 4.39999997615814 | 4 |