I Oracle tillåter DECODE-funktionen oss att lägga till procedurmässig if-then-else-logik till frågan. I den här bloggen kommer vi att försöka få en fullständig förståelse för DECODE-funktionen i SQL. Vi kommer att lära oss de olika sätten att använda DECODE, dess syntax och förstå det med exempel. Stanna med oss till slutet av bloggen.
Ämnen som kommer att behandlas är:
- Vad är DECODE-funktionen i SQL?
- Syntaxen för DECODE-funktionen
- Exempel på DECODE-funktionen
Låt oss börja en efter en.
Vad är DECODE-funktionen i SQL?
I Oracle tillåter DECODE-funktionen oss att lägga till procedurmässig if-then-else-logik till frågan. DECODE jämför uttrycket med varje sökvärde ett efter ett. Om uttryck är lika med en sökning, returneras motsvarande resultat av Oracle-databasen. Om en matchning inte hittas returneras standardvärdet. Om standard utelämnas, returnerar Oracle null.
Typen av argument kan vara:
- Numeriska typer (NUMBER, BINARY_FLOAT eller BINARY_DOUBLE)
Om det första sökresultatparet är numeriskt, jämför Oracle alla sökresultatuttryck och det första expr för att hitta argumentet med den högsta numeriska prioritet, konverterar de återstående argumenten implicit till den datatypen och returnerar den specifika datatypen.
- Teckentyper
Om expr och sök är teckendata, jämför Oracle dem med icke-stoppad jämförelsesemantik. expr, sök och resultatet kan vara vilken som helst av datatyperna CHAR, VARCHAR2, NCHAR eller NVARCHAR2. Den returnerade strängen är av datatypen VARCHAR2 och har samma teckenuppsättning som den första resultatparametern.
Oracle Database använder kortslutningsutvärdering. Den utvärderar endast sökvärden innan den jämförs med uttryck istället för att utvärdera alla sökvärden. Om en tidigare sökning är lika med uttryck, avslutas utvärderingen.
Oracle konverterar expr- och sökvärden till datatypen för det första sökvärdet före jämförelse. Och konverterar returvärdet till samma datatyp som det första resultatet.
Exempel: Om det första resultatet har datatypen CHAR eller om det första resultatet är null, konverterar Oracle returvärdet till datatypen VARCHAR2.
Två nollor anses vara likvärdiga av Oracle. Om expr är null, returnerar Oracle NULL som är resultatet av den första sökningen.
Det maximala antalet komponenter som kan finnas i funktionen DECODE är 255. Detta inkluderar argumenten uttryck, sökning och resultat.
Funktionen DECODE kan användas i följande versioner av Oracle eller PLSQL:
Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Ett grundläggande exempel:
I följande exempel jämför Oracle DECODE()-funktionen det första argumentet med det andra argumentet. Eftersom de är lika returnerar funktionen det andra argumentet som är strängen "One".
SELECT DECODE(1, 1, 'One') FROM dual;
Syntaxen för DECODE-funktionen är:
DECODE(uttryck , sök , resultat [, sök , resultat]... [, standard(valfritt)])
uttryck
Värdet som måste jämföras. Den konverteras automatiskt till datatypen för det första sökvärdet innan den jämförs.
sök
Värdet som jämförs med uttrycket.
resultat
Värdet som returneras, om expression=search.
standard
Om det inte finns några matchningar kommer funktionen DECODE att returnera standard och om standard utelämnas kommer funktionen att returnera NULL.
Exempel på DECODE-funktionen
- DECODE-funktionen kan användas i Oracle/PLSQL enligt följande
SELECT bank_name, DECODE(bank_id, 001, 'SBI', 002, 'ICICI', 003, ‘Dena', 'Gateway') result FROM banks;
Motsvarande IF-THEN-ELSE-sats för ovanstående DECODE()-sats:
IF bank_id = 001 THEN result := 'SBI'; ELSIF bank_id = 002 THEN result := 'ICICI'; ELSIF bank_id = 003 THEN result := 'Dena'; ELSE result := 'Gateway'; END IF;
Funktionen DECODE kommer att jämföra varje bank_id-värde, ett efter ett.
- DEKODE-funktion för att jämföra två datum (datum1 och datum2), där, om datum1> datum2, funktionen AVKOD ska returnera datum2. Annars bör DECODE-funktionen returnera date1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)
Formeln nedan är lika med 0, om datum1 är större än datum2:
(date1 - date2) - ABS(date1 - date2)
Datumexemplet som illustreras ovan kan också ändras enligt följande:
DECODE(SIGN(date1-date2), 1, date2, date1)
- DECODE-sats som returnerar följande:
Om arbetstimmar <1 returnera då 0,04
Om timmar_arbete>=1 och <5 returnerar du 0,04
Om arbetstimmar> 5 returnerar du 0,06
Här måste du skapa en formel som kommer att utvärderas till ett enda nummer för vart och ett av dina intervall.
SELECT emp_name, DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04, 1, 0.04, 0.06) as perc_value FROM employees;
Detta handlar om DECODE-funktionen, vid det här laget måste du ha fått en tydlig bild av hur den fungerar och hur användbar den här funktionen är. Försök nu att använda dem närhelst någon IF-ELSE-logik krävs när du arbetar med SQL. Jag hoppas att artikeln hjälpte dig med begreppen i DECODE-satsen.
Om du vill lära dig mer om MySQL och lära känna denna relationsdatabas med öppen källkod, kolla in vår MySQL DBA-certifieringsutbildning som kommer med instruktörsledd liveutbildning och verklig projektupplevelse. Den här utbildningen hjälper dig att förstå MySQL på djupet och hjälper dig att behärska ämnet.
Har du en fråga till oss? Vänligen nämn det i kommentarsfältet ”DECODE in SQL” och jag återkommer till dig.