sql >> Database teknologi >  >> RDS >> Database

Hvad er brugen af ​​DECODE-funktionen i SQL?

I Oracle giver DECODE-funktionen os mulighed for at tilføje proceduremæssig if-then-else logik til forespørgslen. I denne blog vil vi forsøge at få en fuldstændig forståelse af DECODE-funktionen i SQL. Vi vil lære de forskellige måder at bruge DECODE, dets syntaks på og forstå det med eksempler. Bliv hos os indtil slutningen af ​​bloggen.

De emner, der vil blive dækket, er:

  • Hvad er DECODE-funktionen i SQL?
  • Syntaksen for DECODE-funktionen
  • Eksempler på DECODE-funktionen

Lad os starte én efter én.

Hvad er DECODE-funktionen i SQL?

I Oracle giver DECODE-funktionen os mulighed for at tilføje proceduremæssig if-then-else logik til forespørgslen. DECODE sammenligner udtrykket med hver søgeværdi én efter én. Hvis udtryk er lig med en søgning, returneres det tilsvarende resultat af Oracle-databasen. Hvis et match ikke findes, returneres standard. Hvis standard er udeladt, returnerer Oracle null.

Argumenttypen kan være:

  • Numeriske typer (NUMBER, BINARY_FLOAT eller BINARY_DOUBLE)

Hvis det første søgeresultatpar er numerisk, sammenligner Oracle alle søgeresultatudtryk og det første udtryk for at finde argumentet med den højeste numeriske forrang, konverterer de resterende argumenter implicit til den datatype og returnerer den pågældende datatype.

  • Tegntyper

Hvis expr og search er tegndata, så sammenligner Oracle dem ved hjælp af ikke-polstret sammenligningssemantik. expr, søg, og resultatet kan være en hvilken som helst af datatyperne CHAR, VARCHAR2, NCHAR eller NVARCHAR2. Den returnerede streng er af VARCHAR2-datatypen og er i samme tegnsæt som den første resultatparameter.

Oracle Database bruger kortslutningsevaluering. Den evaluerer kun søgeværdier, før den sammenlignes med udtryk i stedet for at evaluere alle søgeværdier. Hvis en tidligere søgning er lig med udtryk, afsluttes evalueringen.

Oracle konverterer expr- og søgeværdier til datatypen for den første søgeværdi før sammenligning. Og konverterer returværdien til samme datatype som det første resultat.

Eksempel: Hvis det første resultat har datatypen CHAR, eller hvis det første resultat er nul, så konverterer Oracle returværdien til datatypen VARCHAR2.

To nuller anses for at være ækvivalente af Oracle. Hvis expr er null, returnerer Oracle NULL, som er resultatet af den første søgning.

Det maksimale antal komponenter, der kan være indeholdt i DECODE-funktionen, er 255. Dette inkluderer udtryk, søge- og resultatargumenter.

DECODE-funktionen kan bruges i følgende versioner af Oracle eller PLSQL:

Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i

Et grundlæggende eksempel:

I det følgende eksempel sammenligner funktionen Oracle DECODE() det første argument med det andet argument. Da de er ens, returnerer funktionen det andet argument, som er strengen 'En'.

SELECT
DECODE(1, 1, 'One')
FROM
dual;

Syntaksen for DECODE-funktionen er:

DECODE(udtryk , søgning , resultat [, søgning , resultat]... [, standard(valgfri)])

udtryk

Den værdi, der skal sammenlignes. Den bliver automatisk konverteret til datatypen for den første søgeværdi, før den sammenlignes.

søg

Værdien, der sammenlignes med udtrykket.

resultat

Værdien, der returneres, hvis expression=search.

standard

Hvis der ikke er nogen overensstemmelser, vil DECODE-funktionen returnere standard, og hvis standard er udeladt, vil funktionen returnere NULL.

Eksempler på DECODE-funktionen

  • DECODE-funktionen kan bruges i Oracle/PLSQL som følger
SELECT bank_name,
DECODE(bank_id, 001, 'SBI',
                    002, 'ICICI',
                    003, ‘Dena',
                    'Gateway') result
FROM banks;

Tilsvarende IF-THEN-ELSE-sætning for ovenstående DECODE()-sætning:

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 vil sammenligne hver bank_id værdi, en efter en.

  • DECODE-funktion til at sammenligne to datoer (dato1 og dato2), hvor, hvis dato1> dato2, funktionen AFKODE skal returnere dato2. Ellers skulle DECODE-funktionen returnere dato1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)

Formlen nedenfor er lig med 0, hvis dato1 er større end dato2:

(date1 - date2) - ABS(date1 - date2)

Datoeksemplet illustreret ovenfor kan også ændres som følger:

DECODE(SIGN(date1-date2), 1, date2, date1)
  • DECODE-sætning, der returnerer følgende:

Hvis time_of_work <1, så returner 0,04
Hvis arbejdstimer>=1 og <5, så returner 0,04
Hvis arbejdstimer> 5 returneres 0,06

Her skal du oprette en formel, der vil evaluere til et enkelt tal for hvert af dine områder.

SELECT emp_name,
DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04,
                                          1, 0.04,
                                          0.06) as perc_value
FROM employees;

Dette handler om DECODE-funktionen, nu skal du have fået et klart billede af, hvordan det virker, og hvor nyttig denne funktion er. Prøv nu at bruge dem, når der kræves en IF-ELSE-logik, mens du arbejder på SQL. Jeg håber, at artiklen hjalp dig med begreberne i DECODE-erklæringen.

Hvis du ønsker at lære mere om MySQL og lære denne open source relationsdatabase at kende, så tjek vores MySQL DBA Certification Training som kommer med instruktørledet livetræning og projekterfaring i det virkelige liv. Denne træning vil hjælpe dig med at forstå MySQL i dybden og hjælpe dig med at opnå beherskelse over emnet.

Har du et spørgsmål til os? Nævn det i kommentarfeltet i "DECODE in SQL" og jeg vender tilbage til dig.


  1. Mysql select rekursiv få alle børn med flere niveauer

  2. Lær grundlæggende SQL-forespørgsler ved hjælp af MySQL

  3. ORA-03135 – RMAN Duplikat

  4. beregne løbende balance i oracle-forespørgsel