sql >> Database >  >> RDS >> Oracle

Oracle NULLIF() functie

Deze SQL-tutorial biedt uitleg, voorbeelden voor de NULLIF-functie in Oracle

NULLIF-functie is een zeer nuttige functie. Het vergelijkt twee waarden en retourneert null als de waarden hetzelfde zijn, anders retourneer de eerste waarde

expr1 :het zijn de bronwaarden of expressie die worden vergeleken met expr2
expr2 :Het is ook de bronwaarde die wordt vergeleken met expr1

U kunt de letterlijke NULL niet specificeren voor de eerste waarde

SQL> select nullif(NULL,1) from dual;
select nullif(NULL,1) from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CHAR

Gebruik en voorbeeld

SQL> select nullif(1,1) from dual;
NULLIF(1,1)
----------- SQL> select nullif(1,2) from dual; NULLIF(1,2)
-----------
1

Belangrijke opmerking

1)Deze instructie lijkt erg op de case-instructie en is equivalent als
CASE WHEN expr1=expr2 THEN NULL ELSE expr1 END

2) Als beide argumenten numerieke datatypes zijn, bepaalt Oracle Database het argument met de hogere numerieke prioriteit, converteert impliciet het andere argument naar dat datatype en retourneert dat datatype. Als de argumenten niet numeriek zijn, moeten ze van hetzelfde orakel-gegevenstype zijn, anders geeft Oracle een fout terug.

SQL> select nullif(1,'apple') from dual;
select nullif(1,'apple') from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

SQL> select nullif('apple',1) from dual;
select nullif('apple',1) from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected CHAR got NUMBER

Meer voorbeelden

select first_name, length(first_name),last_name,
length(last_name), nullif(length(first_name),length(last_name))
 from emp;

SELECT NULLIF('Sunday', 'Friday') AS check FROM dual;

Een ander gebruiksvoorbeeld van de NULLIF-functie is als u de werknemers wilt weergeven die van baan zijn veranderd sinds ze zijn aangenomen, zoals aangegeven door een job_id in de job_history-tabel die verschilt van de huidige job_id in de werknemerstabel

select emp_name,nullif(b.job_id,a.job_id) old_job from employees a,   job_history  b where a.emp_id=b.emp_id;

FAQ voor Nullif-functie

Hoe een fout door delen door nul te voorkomen met behulp van de NULLIF-functie

We krijgen de fout bij deling door nul als de noemer in de deling nul is. We kunnen dit vermijden door de NULLIF-functie te gebruiken zoals hieronder
selecteer 100/ nullif(0,0) van dual;
Nu hier, aangezien beide waarden gelijk zijn, zal Nullif null retourneren en de hele expressie in plaats daarvan null van enige fout. Hier is hoe u kunt gebruiken bij het omgaan met echte kolommen
selecteer col2/ nullif(col1,0) van exp;

Gerelateerde artikelen

Update-instructie in Oracle
NVL2-functie in Oracle
NVL-functie in Oracle
Coalesce-functie in Oracle
Enkele rij-functies in sql
Verwijderen uit tabelinstructie in Oracle

Externe bron
Oracle-referentie voor NULLIF


  1. Kan ik een standaardschema instellen voor binnen een opgeslagen procedure?

  2. De Eager Index Spool en de Optimizer

  3. PostgreSQL breedtegraad lengtegraad query

  4. MySQL-syntaxisfoutbericht Operand moet 1 kolom(men) bevatten