W Oracle funkcja DECODE pozwala na dodanie proceduralnej logiki jeśli-to-inaczej do zapytania. W tym blogu postaramy się uzyskać pełne zrozumienie funkcji DECODE w SQL. Będziemy uczyć się różnych sposobów korzystania z DECODE, jego składni i rozumieć go na przykładach. Zostań z nami do końca bloga.
Tematy, które zostaną omówione to:
- Co to jest funkcja DECODE w SQL?
- Składnia funkcji DECODE
- Przykłady funkcji DECODE
Zacznijmy jeden po drugim.
Co to jest funkcja DECODE w SQL?
W Oracle funkcja DECODE pozwala na dodanie proceduralnej logiki jeśli-to-inaczej do zapytania. DECODE porównuje wyrażenie z każdą wartością wyszukiwania jeden po drugim. Jeśli wyrażenie jest równe wyszukiwaniu, odpowiedni wynik jest zwracany przez bazę danych Oracle. Jeśli dopasowanie nie zostanie znalezione, zwracana jest wartość domyślna. Jeśli pominięto wartość domyślną, Oracle zwraca null.
Typ argumentów może być następujący:
- Typy liczbowe (NUMBER, BINARY_FLOAT lub BINARY_DOUBLE)
Jeśli pierwsza para wyników wyszukiwania jest liczbowa, Oracle porównuje wszystkie wyrażenia wyników wyszukiwania i pierwsze wyrażenie, aby znaleźć argument o najwyższym priorytecie liczbowym, konwertuje pozostałe argumenty niejawnie na ten typ danych i zwraca ten konkretny typ danych.
- Typy znaków
Jeśli wyrażenie i wyszukiwanie są danymi znakowymi, Oracle porównuje je przy użyciu semantyki porównania bez wypełnienia. expr, search, a wynikiem może być dowolny z typów danych CHAR, VARCHAR2, NCHAR lub NVARCHAR2. Zwrócony ciąg ma typ danych VARCHAR2 i ma ten sam zestaw znaków, co pierwszy parametr wyniku.
Oracle Database wykorzystuje ocenę zwarcia. Ocenia wartości wyszukiwania tylko przed porównaniem go z wyrażeniem, a nie ocenia wszystkie wartości wyszukiwania. Jeśli poprzednie wyszukiwanie jest równe wyrażeniu, ocena zostaje zakończona.
Oracle konwertuje wartości wyrażeń i wyszukiwania na typ danych pierwszej wartości wyszukiwania przed porównaniem. I konwertuje zwracaną wartość na ten sam typ danych, co pierwszy wynik.
Przykład: Jeśli pierwszy wynik ma typ danych CHAR lub jeśli pierwszy wynik jest pusty, Oracle konwertuje wartość zwracaną na typ danych VARCHAR2.
Oracle uważa, że dwie wartości null są równoważne. Jeśli wyrażenie ma wartość null, Oracle zwraca NULL, co jest wynikiem pierwszego wyszukiwania.
Maksymalna liczba składników, które mogą być zawarte w funkcji DECODE to 255. Obejmuje to argumenty wyrażenia, wyszukiwania i wyniku.
Funkcja DECODE może być używana w następujących wersjach Oracle lub PLSQL:
Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Podstawowy przykład:
W poniższym przykładzie funkcja Oracle DECODE() porównuje pierwszy argument z drugim argumentem. Ponieważ są równe, funkcja zwraca drugi argument, którym jest łańcuch „Jeden”.
SELECT DECODE(1, 1, 'One') FROM dual;
Składnia funkcji DECODE to:
DECODE(wyrażenie , wyszukiwanie , wynik [, wyszukiwanie , wynik]… [, domyślnie(opcjonalne)])
wyrażenie
Wartość do porównania. Jest on automatycznie konwertowany na typ danych pierwszej wartości wyszukiwania przed porównaniem.
szukaj
Wartość porównywana z wyrażeniem.
wynik
Wartość, która jest zwracana, jeśli wyrażenie=szukaj.
domyślny
Jeśli nie ma dopasowań, funkcja DECODE zwróci wartość domyślną, a jeśli wartość domyślna zostanie pominięta, funkcja zwróci NULL.
Przykłady funkcji DECODE
- Funkcja DECODE może być używana w Oracle/PLSQL w następujący sposób
SELECT bank_name, DECODE(bank_id, 001, 'SBI', 002, 'ICICI', 003, ‘Dena', 'Gateway') result FROM banks;
Równoważna instrukcja IF-THEN-ELSE dla powyższej instrukcji DECODE():
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;
Funkcja DECODE porówna każdą wartość bank_id, jedna po drugiej.
- Funkcja DECODE do porównania dwóch dat (data1 i data2), gdzie, jeśli data1> data2, funkcja DECODE powinna zwrócić datę2. W przeciwnym razie funkcja DECODE powinna zwrócić datę1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)
Poniższa formuła jest równa 0, jeśli data1 jest większa niż data2:
(date1 - date2) - ABS(date1 - date2)
Powyższy przykład daty można również zmodyfikować w następujący sposób:
DECODE(SIGN(date1-date2), 1, date2, date1)
- Oświadczenie DECODE, które zwróci następujące informacje:
Jeśli godziny_pracy <1, zwróć 0,04
Jeśli godziny_pracy>=1 i <5 to zwróć 0,04
Jeśli godziny_pracy> 5, zwróć 0,06
Tutaj musisz utworzyć formułę, która będzie obliczać pojedynczą liczbę dla każdego z twoich zakresów.
SELECT emp_name, DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04, 1, 0.04, 0.06) as perc_value FROM employees;
Chodzi o funkcję DECODE, do tej pory musisz mieć jasny obraz jej działania i użyteczności tej funkcji. Teraz spróbuj ich użyć, gdy podczas pracy z SQL wymagana jest jakakolwiek logika JEŻELI-ELSE. Mam nadzieję, że artykuł pomógł ci z koncepcjami deklaracji DECODE.
Jeśli chcesz dowiedzieć się więcej o MySQL i poznać tę relacyjną bazę danych typu open source, zapoznaj się z naszym Szkoleniem certyfikacyjnym MySQL DBA który jest dostarczany z prowadzonym przez instruktora szkoleniem na żywo i doświadczeniem w rzeczywistych projektach. To szkolenie pomoże ci dogłębnie zrozumieć MySQL i pomoże ci osiągnąć mistrzostwo w tym temacie.
Masz do nas pytanie? Proszę wspomnieć o tym w sekcji komentarzy ”DECODE w SQL” i oddzwonię.