Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função Oracle NULLIF()


Este tutorial SQL fornece explicações, exemplos para a função NULLIF no Oracle

A função NULLIF é uma função muito útil. Compara dois valores e retorna null se os valores forem iguais, senão retorna o primeiro valor

expr1 :são os valores ou expressão de origem que serão comparados com expr2
expr2 :É também o valor de origem que é comparado com expr1

Você não pode especificar o literal NULL para o primeiro valor
 
SQL> selecione nullif(NULL,1) de dual;
select nullif(NULL,1) de dual
*
ERRO na linha 1:
ORA-00932:tipos de dados inconsistentes:esperado - obteve CHAR

Uso e exemplo
SQL> selecione nullif(1,1) de dual;NULLIF(1,1)
-----------SQL> selecione nullif(1,2) de dual;NULLIF( 1,2)
-----------
1

Observação importante

1) Esta instrução é muito semelhante à instrução case e é equivalente a
CASE WHEN expr1=expr2 THEN NULL ELSE expr1 END

2) Se ambos os argumentos forem tipos de dados numéricos, o Oracle Database determinará o argumento com a precedência numérica mais alta, converterá implicitamente o outro argumento para esse tipo de dados e retornará esse tipo de dados. Se os argumentos não forem numéricos, eles devem ser do mesmo tipo de dados oracle, ou o Oracle retornará um erro.
 
SQL> selecione nullif(1,'apple') de dual;
select nullif(1,'apple') de dual
*
ERRO na linha 1:
ORA-00932 :tipos de dados inconsistentes:esperado NUMBER obteve CHAR

SQL> selecione nullif('apple',1) de dual;
select nullif('apple',1) de dual
*
ERRO na linha 1:
ORA-00932 :tipos de dados inconsistentes:esperado CHAR obteve NUMBER

Mais exemplos
selecione first_name, length(first_name),last_name,length(last_name), nullif(length(first_name),length(last_name)) de emp;SELECT NULLIF('Sunday', 'Friday') AS check FROM dual; 
Outro caso de uso da função NULLIF será se você quiser listar os funcionários que mudaram de emprego desde que foram contratados, conforme indicado por um job_id na tabela job_history diferente do job_id atual na tabela de funcionários
selecione emp_name,nullif(b.job_id,a.job_id) old_job de funcionários a, job_history b onde a.emp_id=b.emp_id;

Perguntas frequentes sobre a função Nullif
Como evitar o erro de divisão por zero com a ajuda da função NULLIF

Obtemos o erro de divisão por zero se o denominador na divisão for zero. Podemos evitar usando a função NULLIF como abaixo
selecione 100/ nullif(0,0) de dual;
Agora aqui, já que ambos os valores são iguais, Nullif retornará nulo e a expressão inteira retornará nulo de qualquer erro. Aqui está como você pode usar ao lidar com coluna real
selecione col2/ nullif(col1,0) de exp;

Artigos relacionados

Instrução de atualização no oracle
Função NVL2 no Oracle
Função NVL no Oracle
Função Coalesce no Oracle
Funções de linha única no sql
Excluir da instrução de tabela no Oracle

Recurso externo
Referência Oracle para NULLIF