Database
 sql >> Datenbank >  >> RDS >> Database

Was ist die Verwendung der DECODE-Funktion in SQL?

In Oracle können wir mit der DECODE-Funktion prozedurale If-Then-Else-Logik zur Abfrage hinzufügen. In diesem Blog werden wir versuchen, ein vollständiges Verständnis der DECODE-Funktion in SQL zu erlangen. Wir werden die verschiedenen Verwendungsmöglichkeiten von DECODE und seine Syntax kennenlernen und anhand von Beispielen verstehen. Bleiben Sie bis zum Ende des Blogs bei uns.

Folgende Themen werden behandelt:

  • Was ist die DECODE-Funktion in SQL?
  • Die Syntax für die DECODE-Funktion
  • Beispiele für die DECODE-Funktion

Fangen wir eins nach dem anderen an.

Was ist die DECODE-Funktion in SQL?

In Oracle können wir mit der DECODE-Funktion prozedurale If-Then-Else-Logik zur Abfrage hinzufügen. DECODE vergleicht den Ausdruck nacheinander mit jedem Suchwert. Wenn Ausdruck gleich einer Suche ist, wird das entsprechende Ergebnis von der Oracle-Datenbank zurückgegeben. Wenn keine Übereinstimmung gefunden wird, wird default zurückgegeben. Wenn default weggelassen wird, gibt Oracle null zurück.

Die Art der Argumente kann sein:

  • Numerische Typen (NUMBER, BINARY_FLOAT oder BINARY_DOUBLE)

Wenn das erste Suchergebnispaar numerisch ist, vergleicht Oracle alle Suchergebnisausdrücke und den ersten Ausdruck, um das Argument mit dem höchsten numerischen Vorrang zu finden, konvertiert die verbleibenden Argumente implizit in diesen Datentyp und gibt diesen bestimmten Datentyp zurück.

  • Charaktertypen

Wenn expr und search Zeichendaten sind, vergleicht Oracle sie mit nicht aufgefüllter Vergleichssemantik. expr, search, und das Ergebnis kann jeder der Datentypen CHAR, VARCHAR2, NCHAR oder NVARCHAR2 sein. Der zurückgegebene String ist vom Datentyp VARCHAR2 und hat denselben Zeichensatz wie der erste Ergebnisparameter.

Oracle Database verwendet Kurzschlussauswertung. Es wertet Suchwerte nur aus, bevor es mit dem Ausdruck verglichen wird, anstatt alle Suchwerte auszuwerten. Wenn eine vorherige Suche gleich Ausdruck ist, wird die Auswertung abgebrochen.

Oracle konvertiert expr- und Suchwerte vor dem Vergleich in den Datentyp des ersten Suchwerts. Und konvertiert den Rückgabewert in denselben Datentyp wie das erste Ergebnis.

Beispiel: Hat das erste Ergebnis den Datentyp CHAR oder ist das erste Ergebnis null, dann konvertiert Oracle den Rückgabewert in den Datentyp VARCHAR2.

Zwei Nullen werden von Oracle als gleichwertig betrachtet. Wenn expr null ist, gibt Oracle NULL zurück, was das Ergebnis der ersten Suche ist.

Die maximale Anzahl von Komponenten, die in der DECODE-Funktion enthalten sein können, beträgt 255. Dazu gehören die Ausdrucks-, Such- und Ergebnisargumente.

Die DECODE-Funktion kann in den folgenden Versionen von Oracle oder PLSQL verwendet werden:

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

Ein einfaches Beispiel:

Im folgenden Beispiel vergleicht die Oracle DECODE()-Funktion das erste Argument mit dem zweiten Argument. Da sie gleich sind, gibt die Funktion das zweite Argument zurück, das die Zeichenfolge „Eins“ ist.

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

Die Syntax für die DECODE-Funktion lautet:

DECODE(Ausdruck , Suche , Ergebnis [, Suche , Ergebnis]… [, Standard (optional)])

Ausdruck

Der zu vergleichende Wert. Er wird vor dem Vergleich automatisch in den Datentyp des ersten Suchwerts konvertiert.

Suche

Der Wert, der mit dem Ausdruck verglichen wird.

Ergebnis

Der zurückgegebene Wert, wenn expression=search.

Standard

Wenn es keine Übereinstimmungen gibt, gibt die DECODE-Funktion den Standard zurück, und wenn der Standard weggelassen wird, gibt die Funktion NULL zurück.

Beispiele für die DECODE-Funktion

  • Die DECODE-Funktion kann in Oracle/PLSQL wie folgt verwendet werden
SELECT bank_name,
DECODE(bank_id, 001, 'SBI',
                    002, 'ICICI',
                    003, ‘Dena',
                    'Gateway') result
FROM banks;

Äquivalente IF-THEN-ELSE-Anweisung für die obige DECODE()-Anweisung:

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;

Die DECODE-Funktion vergleicht jeden bank_id-Wert einzeln.

  • DECODE-Funktion zum Vergleichen zweier Daten (date1 und date2), wobei, wenn date1> date2, die DECODE-Funktion date2 zurückgeben sollte. Andernfalls sollte die DECODE-Funktion date1
  • zurückgeben
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)

Die folgende Formel ist gleich 0, wenn Datum1 größer als Datum2 ist:

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

Das oben abgebildete Datumsbeispiel kann auch wie folgt modifiziert werden:

DECODE(SIGN(date1-date2), 1, date2, date1)
  • DECODE-Anweisung, die Folgendes zurückgibt:

Wenn Arbeitsstunden <1, dann 0,04 zurückgeben
Wenn Arbeitsstunden>=1 und <5, dann 0,04 zurückgeben
Wenn Arbeitsstunden> 5, dann 0,06 zurückgeben

Hier müssen Sie eine Formel erstellen, die für jeden Ihrer Bereiche eine einzelne Zahl ergibt.

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

Hier dreht sich alles um die DECODE-Funktion, inzwischen müssen Sie sich ein klares Bild davon gemacht haben, wie sie funktioniert und wie nützlich diese Funktion ist. Versuchen Sie jetzt, sie immer dann zu verwenden, wenn bei der Arbeit an SQL eine IF-ELSE-Logik erforderlich ist. Ich hoffe, der Artikel hat Ihnen mit den Konzepten der DECODE-Anweisung geholfen.

Wenn Sie mehr über MySQL erfahren und diese relationale Open-Source-Datenbank kennenlernen möchten, sehen Sie sich unsere MySQL-DBA-Zertifizierungsschulung an Dazu gehören von einem Kursleiter geleitete Live-Schulungen und reale Projekterfahrung. Dieses Training wird Ihnen helfen, MySQL gründlich zu verstehen und das Thema zu beherrschen.

Haben Sie eine Frage an uns? Bitte erwähnen Sie es im Kommentarbereich von "DECODE in SQL" und ich melde mich bei dir.