sql >> Databasteknik >  >> RDS >> Database

Vad är användningen av DECODE-funktionen i SQL?

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.


  1. Distribuera och konfigurera ODP.NET för att fungera utan installation med Entity Framework

  2. Nya kolumnändringar endast för metadata i SQL Server 2016

  3. oratop

  4. 12c IDENTITY kolumner