Доступные версии документации

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

Функция

Замена неверного вещественного значения (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 |
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter