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

Одновариантная замена NULL-значения реальным значением

Функция

Одновариантная замена неопределенного значения (NULL-значения) реальным значением.

Спецификация
 
Общие правила
  1. Функция возвращает значение <выражения1> в случае, если <выражение1> не является NULL-значением, иначе возвращает значение <выражения2>.

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

    CASE WHEN <выражение1> IS NOT NULL
    THEN <выражение1> ELSE <выражение2> END;
  3. Типы данных <выражения1>, <выражения2> должны быть идентичны или приводимыми. При приведении типов данных по умолчанию (без конструкции CAST…) второй аргумент приводится к типу данных первого аргумента.

  4. Аргументы могут быть заданы <SQL-параметром>, который должен содержать спецификацию типа данных параметра.

    select nvl(? (char(5)), null);
    111
    |111  |
    
    select nvl(? (char(5)), '222');
    NULL
    |222  |
  5. Оба <подзапроса> должны содержать одно выбираемое <значимое выражение> и возвращать скалярное значение. Типы данных возвращаемых значений должны быть идентичными или приводимыми друг к другу.

    create or replace table tst2 (id int, ch char(5));
    insert into tst2(id, ch) values (1,'aaa'),(2,'bbb'), (3,NULL);
    
    create or replace table tst1 (id int, val char(5));
    insert into tst1(id, val) values (1,'111'),(2,'bbb'),(3,'aaa');
    
    create or replace table tst (id int, ch char(5));
    insert into tst(id, ch) values (1,'aaa'),(2,'bbb'),(3,NULL), (4,'bbb');
    
    select count(*)
      from tst
     where ch = nvl((select ch 
                       from tst2 
                      where id=2), 
                    (select val 
                       from tst1
                      where id=2));
    |          2|
    
    select count(*) 
      from tst
     where ch = nvl((select ch 
                       from tst2 
                      where id=3),
                    (select val 
                       from tst1 
                      where id=3));
    |          1|
Примеры
create table tab1 (i int);
…
select * from tab1;
| 1    |
| NULL |
| 3    |
| 4    |
| NULL |
select avg (i), avg(nvl(i,0)) from tab1;
|2.66666666 |1.6 |
select nvl(cast i as char, 'Неопределено') from tab1;
| 1            |
| Неопределено |
| 3            |
| 4            |
| Неопределено |
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter