sql >> Databasteknik >  >> RDS >> Oracle

Oracle NULLIF() funktion

Denna SQL-handledning ger förklaringar, exempel för NULLIF-funktionen i Oracle

NULLIF-funktionen är en mycket användbar funktion. Den jämför två värden och returnerar null om värdena är samma, annars returneras det första värdet

expr1 :det är källvärdena eller uttrycket som kommer att jämföras med expr2
expr2 :Det är också källvärdet som jämförs med expr1

Du kan inte ange den bokstavliga NULL för det första värdet

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

Användning och exempel

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

Viktig anmärkning

1)Detta uttalande är mycket likt case-satsen och det motsvarar
CASE WHEN expr1=expr2 THEN NULL ELSE expr1 END

2) Om båda argumenten är numeriska datatyper, bestämmer Oracle Database argumentet med högre numerisk prioritet, konverterar implicit det andra argumentet till den datatypen och returnerar den datatypen. Om argumenten inte är numeriska måste de vara av samma oracle-datatyp, annars returnerar Oracle ett fel.

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

Fler exempel

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;

Ett annat användningsfall av NULLIF-funktionen är om du vill lista de anställda som har bytt jobb sedan de anställdes, vilket indikeras av ett job_id i tabellen job_history som skiljer sig från det aktuella job_id i tabellen anställda

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;

Vanliga frågor om Nullif-funktionen

Hur man undviker att dividera med noll-fel med hjälp av NULLIF-funktionen

Vi får divideringen med noll-felet om nämnaren i divisionen är noll. Vi kan undvika genom att använda NULLIF-funktionen enligt nedan
välj 100/ nullif(0,0) från dual;
Nu här eftersom båda värdena är lika, kommer Nullif att returnera null och hela uttrycket returnerar null istället av något fel. Så här kan du använda när du har att göra med riktig kolumn
välj col2/ nullif(col1,0) från exp;

Relaterade artiklar

Uppdatera sats i Oracle
NVL2-funktion i Oracle
NVL-funktion i Oracle
Koaliseringsfunktion i Oracle
Enradsfunktioner i sql
Ta bort från tabellsats i Oracle

Extern resurs
Oracle Reference för NULLIF


  1. Hur man hanterar MariaDB 10.3 med ClusterControl

  2. Hur tolkar du en frågas förklara plan?

  3. sträng bokstavlig för lång - hur man tilldelar långa xml-data till clob-datatyp i oracle 11g r2

  4. Hur kan jag göra en UPDATE-sats med JOIN i SQL Server?