Да уж, давно не писав в блог, почну зараз виправлятися! Спочатку відпустка була тривалий, а потім ще й захворів, все це відсувало публікацію нових статей.
У цій статті я хочу написати про функцію sql, яка доступна тільки в СУБД Oracle. Функція називається «DECODE», що представляє собою спрощений варіант вираження «CASE WHEN»:
DECODE (<Контрольное значение>, <Значение1>, <Значение2>, <Значение3>, <Значение4>...<Дефолтное значение>)
Тут, «Контрольне значення» - це значення, яке перевіряється.
Тобто це еквівалентно цього:
case <контрольное значение> when <значение1> then <значение2> when <значение3> then <значение4>. else <последнее значение> end
Завдання програміста - правильно співвіднести пари значень після початкової змінної, тобто «<Контрольного значения>».
Наведу дуже примітивний приклад:
select decode ( 'Вова1'. '8', 'Вова'. 'Вова', 'Вова4'. 'Діма') from dual
Що поверне цей запит. А він поверне відповідь «Діма». а без значення «Діма», поверне NULL. Оскільки тут значення «Діма» - це дефолтний і є значення, тобто яке повертається за замовчуванням.
Хотів зробити одне зауваження - ця функція досить складна для розуміння і її використання може призвести до помилок в запитах, тому краще використовувати інші схожі функції - Nvl і Coalesce. Найчастіше саме за допомогою них можна вирішити потрібні завдання в обробці null-значень без допомоги функції Decode.
Update - Дякую всім, хто знайшов помилку в тексті даної статті, неуважно деякі речі написав, пізно було, спав мабуть 🙂
Плагін WordPress: Health Check - чи готові ви оновитися до WordPress 3.2
WordPress 3.1 - Прибираємо Admin Bar
Він повертає 3 рядки (так як в 3 місцях стоять хрестики). Але необхідно повертати один рядок з хрестиками у відповідному місяці ... Це реально?
Відколи DECODE стала функцією. На мій погляд це все ж вираз!
В оф. доці це якраз функція і є - «In a DECODE function, Oracle considers two nulls to be equivalent». =)
було б добре, якщо в описі прісутсвтовалі типи, з якими можна порівнювати і повертати
Типи можуть бути такі (більшість поширених) - NUMBER, BINARY_FLOAT, or BINARY_DOUBLE, CHAR, VARCHAR2, NCHAR, or NVARCHAR2 =)