В Oracle функцията DECODE ни позволява да добавим процедурна логика if-then-else към заявката. В този блог ще се опитаме да разберем напълно функцията DECODE в SQL. Ще научим различните начини за използване на DECODE, неговия синтаксис и ще го разберем с примери. Останете с нас до края на блога.
Темите, които ще бъдат обхванати са:
- Какво е функцията DECODE в SQL?
- Синтаксисът на функцията DECODE
- Примери за функция DECODE
Да започнем един по един.
Какво е функцията DECODE в SQL?
В Oracle функцията DECODE ни позволява да добавим процедурна логика if-then-else към заявката. DECODE сравнява израза с всяка стойност за търсене един по един. Ако изразът е равен на търсене, тогава съответният резултат се връща от базата данни на Oracle. Ако съвпадението не бъде намерено, тогава се връща по подразбиране. Ако по подразбиране е пропуснато, Oracle връща null.
Типът на аргументите може да бъде:
- Числови типове (NUMBER, BINARY_FLOAT или BINARY_DOUBLE)
Ако първата двойка резултат от търсене е числова, тогава Oracle сравнява всички изрази за резултати от търсене и първия израз, за да намери аргумента с най-висок числов приоритет, преобразува останалите аргументи имплицитно в този тип данни и връща този конкретен тип данни.
- Типове знаци
Ако expr и search са символни данни, тогава Oracle ги сравнява, използвайки неподплатена семантика за сравнение. expr, search и резултатът може да бъде всеки от типовете данни CHAR, VARCHAR2, NCHAR или NVARCHAR2. Върнатият низ е от тип данни VARCHAR2 и е в същия набор от знаци като първия параметър за резултат.
Oracle Database използва оценка на късо съединение. Той оценява стойностите за търсене само преди да го сравни с израза, вместо да оценява всички стойности за търсене. Ако предишно търсене е равно на израз, оценката се прекратява.
Oracle преобразува стойностите за израз и търсене в типа данни на първата стойност за търсене преди сравнение. И преобразува върнатата стойност в същия тип данни като първия резултат.
Пример: Ако първият резултат има тип данни CHAR или ако първият резултат е нулев, тогава Oracle преобразува върнатата стойност в типа данни VARCHAR2.
Две нули се считат за еквивалентни от Oracle. Ако expr е null, Oracle връща NULL, което е резултат от първото търсене.
Максималният брой компоненти, които могат да се съдържат във функцията DECODE, е 255. Това включва аргументите израз, търсене и резултат.
Функцията DECODE може да се използва в следните версии на Oracle или PLSQL:
Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Основен пример:
В следващия пример функцията на Oracle DECODE() сравнява първия аргумент с втория аргумент. Тъй като те са равни, функцията връща втория аргумент, който е низът „Едно“.
SELECT DECODE(1, 1, 'One') FROM dual;
Синтаксисът на функцията DECODE е:
DECODE(израз, търсене, резултат [, търсене, резултат]… [, по подразбиране (по избор)])
израз
Стойността, която трябва да се сравни. Той автоматично се преобразува към типа данни на първата стойност за търсене, преди да се сравни.
търсене
Стойността, която се сравнява с израза.
резултат
Стойността, която се връща, ако Expression=search.
по подразбиране
Ако няма съвпадения, функцията DECODE ще върне по подразбиране и ако по подразбиране е пропусната, тогава функцията ще върне NULL.
Примери за функция DECODE
- Функцията DECODE може да се използва в Oracle/PLSQL, както следва
SELECT bank_name, DECODE(bank_id, 001, 'SBI', 002, 'ICICI', 003, ‘Dena', 'Gateway') result FROM banks;
Еквивалентен оператор IF-THEN-ELSE за горния израз 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;
Функцията DECODE ще сравнява всяка стойност на bank_id, една по една.
- Функция DECODE за сравняване на две дати (дата1 и дата2), където, ако дата1> дата2, функцията DECODE трябва да върне дата2. В противен случай функцията DECODE трябва да върне дата1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)
Формулата по-долу е равна на 0, ако дата 1 е по-голяма от дата 2:
(date1 - date2) - ABS(date1 - date2)
Примерът за дата, илюстриран по-горе, може също да бъде променен, както следва:
DECODE(SIGN(date1-date2), 1, date2, date1)
- Израз DECODE, който ще върне следното:
Ако hours_of_work <1, тогава върнете 0,04
Ако часове_работа>=1 и <5, тогава върнете 0,04
Ако hours_of_work> 5, тогава върнете 0,06
Тук трябва да създадете формула, която ще се оценява до едно число за всеки един от вашите диапазони.
SELECT emp_name, DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04, 1, 0.04, 0.06) as perc_value FROM employees;
Това е всичко за функцията DECODE, досега трябва да имате ясна представа за това как работи и колко полезна е тази функция. Сега опитайте да ги използвате винаги, когато е необходима логика IF-ELSE, докато работите върху SQL. Надявам се статията да ви е помогнала с концепциите на израза DECODE.
Ако искате да научите повече за MySQL и да се запознаете с тази релационна база данни с отворен код, разгледайте нашетоОбучение за сертифициране на MySQL DBA който идва с обучение на живо от инструктор и реален опит с проекти. Това обучение ще ви помогне да разберете MySQL в дълбочина и ще ви помогне да постигнете майсторство по темата.
Имате въпрос към нас? Моля, споменете го в секцията за коментари на ”ДЕКОДИРАНЕ в SQL” и ще се свържа с вас.