Database
 sql >> база данни >  >> RDS >> Database

Каква е употребата на функцията DECODE в SQL?

В 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” и ще се свържа с вас.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Митът, че ИЗПУСКАНЕ и ОТСЪЖАНЕ НА ТАБЛИЦА не са регистрирани

  2. Не харесвате тригерите на базата данни? Просто не знаете как да работите с тях!

  3. Използване на данни, защитени с персонализирано хранилище за ключове от Linux

  4. Проучване на грешка ORA 028513 DG4ODBC

  5. Използване на RStudio с несистемна версия на мениджъра на драйвери unixODBC