V Oracle nám funkce DECODE umožňuje přidat do dotazu procedurální logiku if-then-else. V tomto blogu se pokusíme získat úplné pochopení funkce DECODE v SQL. Naučíme se různé způsoby použití DECODE, jeho syntaxi a porozumíme mu na příkladech. Zůstaňte s námi až do konce blogu.
Témata, která budou zahrnuta, jsou:
- Co je funkce DECODE v SQL?
- Syntaxe funkce DECODE
- Příklady funkce DECODE
Začněme jeden po druhém.
Co je funkce DECODE v SQL?
V Oracle nám funkce DECODE umožňuje přidat do dotazu procedurální logiku if-then-else. DECODE porovnává výraz s každou hledanou hodnotou jednu po druhé. Pokud je výraz roven hledání, pak Oracle Database vrátí odpovídající výsledek. Pokud shoda není nalezena, vrátí se výchozí. Pokud je výchozí hodnota vynechána, Oracle vrátí hodnotu null.
Typ argumentů může být:
- Číselné typy (NUMBER, BINARY_FLOAT nebo BINARY_DOUBLE)
Pokud je první dvojice výsledků hledání číselná, pak Oracle porovná všechny výrazy výsledků hledání a první výraz, aby našel argument s nejvyšší číselnou prioritou, zbývající argumenty implicitně převede na tento datový typ a vrátí tento konkrétní datový typ.
- Typy znaků
Jsou-li výrazy a hledání znaková data, pak je Oracle porovnává pomocí nevyplněné sémantiky porovnávání. expr, search a výsledkem může být libovolný z datových typů CHAR, VARCHAR2, NCHAR nebo NVARCHAR2. Vrácený řetězec je datového typu VARCHAR2 a je ve stejné znakové sadě jako parametr prvního výsledku.
Oracle Database používá zkratové vyhodnocení. Hodnoty vyhledávání vyhodnocuje pouze před jejich porovnáním s výrazem, nikoli vyhodnocování všech hodnot vyhledávání. Pokud se předchozí hledání rovná výrazu, vyhodnocení se ukončí.
Oracle před porovnáním převádí hodnoty expr a search na datový typ první hodnoty vyhledávání. A převede návratovou hodnotu na stejný datový typ jako první výsledek.
Příklad: Pokud má první výsledek datový typ CHAR nebo pokud je první výsledek null, pak Oracle převede návratovou hodnotu na datový typ VARCHAR2.
Dvě hodnoty null jsou společností Oracle považovány za ekvivalentní. Pokud je výraz expr null, pak Oracle vrátí NULL, což je výsledek prvního vyhledávání.
Maximální počet komponent, které mohou být obsaženy ve funkci DECODE, je 255. To zahrnuje argumenty výraz, hledání a výsledek.
Funkci DECODE lze použít v následujících verzích Oracle nebo PLSQL:
Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Základní příklad:
V následujícím příkladu funkce Oracle DECODE() porovnává první argument s druhým argumentem. Protože jsou si rovny, funkce vrací druhý argument, kterým je řetězec ‚Jedna‘.
SELECT DECODE(1, 1, 'One') FROM dual;
Syntaxe funkce DECODE je:
DEKODOVAT(výraz , hledat , výsledek [, hledat , výsledek]… [, výchozí (volitelné)])
výraz
Hodnota, která se má porovnávat. Před porovnáním se automaticky převede na datový typ první hledané hodnoty.
vyhledat
Hodnota, která se porovnává s výrazem.
výsledek
Hodnota, která je vrácena, pokud výraz=hledat.
výchozí
Pokud neexistují žádné shody, funkce DECODE vrátí výchozí hodnotu a pokud je výchozí hodnota vynechána, funkce vrátí hodnotu NULL.
Příklady funkce DECODE
- Funkci DECODE lze v Oracle/PLSQL použít následovně
SELECT bank_name, DECODE(bank_id, 001, 'SBI', 002, 'ICICI', 003, ‘Dena', 'Gateway') result FROM banks;
Ekvivalentní příkaz IF-THEN-ELSE pro výše uvedený příkaz 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;
Funkce DECODE porovná každou hodnotu bank_id, jednu po druhé.
- Funkce DECODE pro porovnání dvou dat (datum1 a datum2), přičemž pokud je datum1> datum2, funkce DECODE by měla vrátit datum2. V opačném případě by funkce DECODE měla vrátit datum1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)
Níže uvedený vzorec se rovná 0, pokud je datum1 větší než datum2:
(date1 - date2) - ABS(date1 - date2)
Výše uvedený příklad data lze také upravit následovně:
DECODE(SIGN(date1-date2), 1, date2, date1)
- Příkaz DECODE, který vrátí následující:
Pokud je počet hodin_práce <1, vrátí se 0,04
Pokud počet hodin_práce>=1 a <5, vrátí 0,04
Je-li počet hodin_práce> 5, vrátí se 0,06
Zde musíte vytvořit vzorec, který bude vyhodnocen jako jediné číslo pro každý z vašich rozsahů.
SELECT emp_name, DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04, 1, 0.04, 0.06) as perc_value FROM employees;
Toto je vše o funkci DECODE, nyní musíte mít jasnou představu o tom, jak funguje a jak užitečná tato funkce je. Nyní je zkuste použít, kdykoli je při práci na SQL vyžadována jakákoli logika IF-ELSE. Doufám, že vám článek pomohl s koncepty příkazu DECODE.
Pokud se chcete dozvědět více o MySQL a poznat tuto relační databázi s otevřeným zdrojovým kódem, podívejte se na naše školení certifikace MySQL DBA který přichází s instruktorem vedeným živým školením a zkušenostmi z reálného života. Toto školení vám pomůže porozumět MySQL do hloubky a pomůže vám dosáhnout zvládnutí tohoto předmětu.
Máte na nás otázku? Uveďte to prosím v sekci komentářů ”DECODE in SQL” a já se vám ozvu.