sql >> Database >  >> RDS >> Database

Wat is het gebruik van de DECODE-functie in SQL?

In Oracle stelt de DECODE-functie ons in staat om procedurele if-then-else-logica aan de query toe te voegen. In deze blog zullen we proberen een volledig begrip te krijgen van de DECODE-functie in SQL. We zullen de verschillende manieren leren om DECODE, zijn syntaxis, te gebruiken en het te begrijpen met voorbeelden. Blijf bij ons tot het einde van de blog.

De onderwerpen die aan bod komen zijn:

  • Wat is de DECODE-functie in SQL?
  • De syntaxis voor de DECODE-functie
  • Voorbeelden van DECODE-functie

Laten we één voor één beginnen.

Wat is de DECODE-functie in SQL?

In Oracle stelt de DECODE-functie ons in staat om procedurele if-then-else-logica aan de query toe te voegen. DECODE vergelijkt de uitdrukking één voor één met elke zoekwaarde. Als expressie gelijk is aan een zoekopdracht, wordt het bijbehorende resultaat geretourneerd door de Oracle Database. Als er geen overeenkomst wordt gevonden, wordt de standaard geretourneerd. Als standaard wordt weggelaten, retourneert Oracle null.

Het type argumenten kan zijn:

  • Numerieke typen (NUMBER, BINARY_FLOAT of BINARY_DOUBLE)

Als het eerste zoekresultaatpaar numeriek is, vergelijkt Oracle alle zoekresultaatuitdrukkingen en de eerste expr om het argument met de hoogste numerieke prioriteit te vinden, converteert de resterende argumenten impliciet naar dat datatype en retourneert dat specifieke datatype.

  • Tekentypen

Als expr en zoeken karaktergegevens zijn, vergelijkt Oracle ze met behulp van niet-opgevulde vergelijkingssemantiek. expr, zoeken en het resultaat kan elk van de gegevenstypen CHAR, VARCHAR2, NCHAR of NVARCHAR2 zijn. De geretourneerde String is van het datatype VARCHAR2 en heeft dezelfde tekenset als de eerste resultaatparameter.

Oracle Database gebruikt kortsluitingsevaluatie. Het evalueert alleen zoekwaarden voordat het wordt vergeleken met expressie, in plaats van alle zoekwaarden te evalueren. Als een eerdere zoekopdracht gelijk is aan expressie, wordt de evaluatie beëindigd.

Oracle converteert expr- en zoekwaarden naar het datatype van de eerste zoekwaarde voor vergelijking. En converteert de geretourneerde waarde naar hetzelfde gegevenstype als het eerste resultaat.

Voorbeeld: Als het eerste resultaat het datatype CHAR heeft of als het eerste resultaat null is, converteert Oracle de geretourneerde waarde naar het datatype VARCHAR2.

Twee nulls worden door Oracle als equivalent beschouwd. Als expr null is, retourneert Oracle NULL, wat het resultaat is van de eerste zoekopdracht.

Het maximum aantal componenten dat kan worden opgenomen in de DECODE-functie is 255. Dit omvat de argumenten voor expressie, zoekopdrachten en resultaten.

De DECODE-functie kan worden gebruikt in de volgende versies van Oracle of PLSQL:

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

Een eenvoudig voorbeeld:

In het volgende voorbeeld vergelijkt de Oracle DECODE()-functie het eerste argument met het tweede argument. Omdat ze gelijk zijn, retourneert de functie het tweede argument dat de string 'One' is.

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

De syntaxis voor de DECODE-functie is:

DECODE(uitdrukking, zoek, resultaat [, zoek, resultaat]… [, standaard(optioneel)])

expressie

De waarde die moet worden vergeleken. Het wordt automatisch geconverteerd naar het gegevenstype van de eerste zoekwaarde voordat het wordt vergeleken.

zoeken

De waarde die wordt vergeleken met de uitdrukking.

resultaat

De waarde die wordt geretourneerd, als expression=search.

standaard

Als er geen overeenkomsten zijn, retourneert de functie DECODE de standaardwaarde en als de standaardwaarde wordt weggelaten, retourneert de functie NULL.

Voorbeelden van DECODE-functie

  • De DECODE-functie kan als volgt in Oracle/PLSQL worden gebruikt
SELECT bank_name,
DECODE(bank_id, 001, 'SBI',
                    002, 'ICICI',
                    003, ‘Dena',
                    'Gateway') result
FROM banks;

Gelijkwaardige IF-THEN-ELSE-instructie voor de bovenstaande DECODE()-instructie:

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;

De DECODE-functie vergelijkt elke bank_id-waarde één voor één.

  • DECODE-functie om twee datums (datum1 en datum2) te vergelijken, waarbij, als datum1> datum2, de functie DECODE date2 moet retourneren. Anders zou de DECODE-functie date1 moeten retourneren
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)

De onderstaande formule is gelijk aan 0, als date1 groter is dan date2:

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

Het hierboven geïllustreerde datumvoorbeeld kan ook als volgt worden gewijzigd:

DECODE(SIGN(date1-date2), 1, date2, date1)
  • DECODE-instructie die het volgende retourneert:

Als hours_of_work <1 retourneer dan 0,04
Als hours_of_work>=1 en <5 retourneert dan 0,04
Als hours_of_work> 5 dan 0,06 teruggeven

Hier moet u een formule maken die voor elk van uw bereiken een enkel getal oplevert.

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

Dit gaat allemaal over de DECODE-functie, je moet nu een duidelijk beeld hebben van hoe het werkt en hoe nuttig deze functie is. Probeer ze nu te gebruiken wanneer IF-ELSE-logica vereist is tijdens het werken aan SQL. Ik hoop dat het artikel je heeft geholpen met de concepten van de DECODE-verklaring.

Als je meer wilt weten over MySQL en deze open-source relationele database wilt leren kennen, bekijk dan onzeMySQL DBA-certificeringstraining die wordt geleverd met een door een instructeur geleide live training en real-life projectervaring. Deze training zal u helpen MySQL diepgaand te begrijpen en u te helpen het onderwerp onder de knie te krijgen.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte van ”DECODE in SQL” en ik zal contact met je opnemen.


  1. Een logbestand toevoegen aan een SQL Server-database (T-SQL)

  2. Hoe zorg ik ervoor dat een gematerialiseerde view altijd up-to-date is?

  3. Wanneer STRAIGHT_JOIN gebruiken met MySQL?

  4. C# oproep orakel opgeslagen functie