Замена NaN-значения правильным значением (NANVL)

Функция

Замена неверного вещественного значения (NaN-значения) правильным.

Спецификация
 
<​синтаксис​>::=
Общие правила
  1. <​Выражение1​>, <​выражение2​> должны быть вещественными значениями (типа REAL, DOUBLE) или приводиться к нему.

Общие правила
  1. Если <​выражение1​> имеет значение NaN или +/- INFINITY, функция возвращает значение <​выражения2​>, в противном случае – значение <​выражения1​>.

  2. Данная функция эквивалентна конструкции СУБД ЛИНТЕР:

    CASE WHEN <​выражение1​> IS NOT NAN
    THEN <​выражение 1​> ELSE <​выражение2​>;
  3. Аргументы могут быть заданы <​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 |