SQL DECODE関数

概要: このチュートリアルでは、SQL DECODE() 関数を使用して、クエリにif-then-elseロジックを追加する方法を学習します。

SQL DECODE()関数の紹介

SQL DECODE() 関数を使用すると、手続き型のif-then-elseロジックをクエリに追加できます。次の例を見てみましょう。

SELECT DECODE(1,1,'Equal');
Code language: SQL (Structured Query Language) (sql)

この例では、DECODE() 関数は最初の引数(1)を2番目の引数(これも1)と比較します。最初の引数は2番目の引数と同じなので、関数は3番目の引数である文字列Equalを返します。

上記のDECODE()関数は、次のIF文と同じように機能します。

IF 1 = 1 THEN
    RETURN 'Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)

次の例では、最初の引数が2番目の引数と等しくないため、NULLが返されます。

SELECT DECODE(1,2, 'Equal');
Code language: SQL (Structured Query Language) (sql)

これは、次の文のように機能します。

IF 1 = 2 THEN
    RETURN 'Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)

最初の引数が2番目の引数と等しくない場合に値を指定するには、DECODE()関数の次の形式を使用します。

SELECT DECODE(1,2, 'Equal', 'Not Equal');
Code language: SQL (Structured Query Language) (sql)

これは、次のIF-THEN-ELSE文のように機能します。

IF 1 = 2 THEN
    RETURN 'Equal';
ELSE
    RETURN 'Not Equal';
END IF;
Code language: SQL (Structured Query Language) (sql)

一般に、次の例に示すように、DECODE()関数の最初の引数を引数のリストと比較できます。

SELECT DECODE (2, 1, 'Equal 1', 2, 'Equal 2');
Code language: SQL (Structured Query Language) (sql)

この例は、次のIF-THEN-ELSE IF文のように機能します。

IF 2 = 1 THEN
     RETURN 'Equal 1';
ELSE IF 2 = 2 
    RETURN 'Equal 2';
END IF;
Code language: SQL (Structured Query Language) (sql)

次の例を参照してください。

SELECT DECODE(3,1, 'Equal 1,', 2, 'Equal 2', 'Not Equal 1 or 2');
Code language: SQL (Structured Query Language) (sql)

この例は、次のIF-THEN-ELSEIF-ELSE文のように機能します。

IF 3 = 1 THEN 
    RETURN 'Equal 1';
ELSE IF 3 =2 THEN
    RETURN 'Equal 2';
ELSE
    RETURN 'Not Equal 1 or 2';
END IF;
Code language: SQL (Structured Query Language) (sql)

SQL DECODE()関数の構文

SQL DECODE()関数の構文を以下に示します。

DECODE (e , s1, r1[, s2, r2], ...,[,sn,rn] [, d]);
Code language: SQL (Structured Query Language) (sql)

この構文では、

  • eは、他の引数s1、s2、…、snと検索または比較される引数です。
  • s1、s2、…、またはsnは、検索する式です。関数は、最初の引数をs1、s2、…、snと順番に比較します。比較e = s1、e = s2、…、e = snのいずれかがtrueを返すと、DECODE()関数は評価を終了し、結果を返します。
  • r1、r2、…、またはrnは、ei = siの場合に返される結果です。
  • dは、eがいずれの引数s1、s2、…、またはsnとも等しくない場合に返される式です。

SQL DECODE()関数の例

デモンストレーションには、サンプルデータベースemployeesテーブルを使用します。

SQL DECODE: employees table

次のクエリを参照してください。

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
ORDER BY DECODE('S',
        'F',
        first_name,
        'L',
        last_name,
        'S',
        salary);
Code language: SQL (Structured Query Language) (sql)

この例では、ORDER BY句でDECODE()関数を使用しました。DECODE()関数は、入力引数に基づいてソートする列を返しました。この場合、DECODE()関数はsalary列を返したため、結果セットはsalary列でソートされました。

このチュートリアルでは、SQL DECODE()関数を使用してクエリにif-then-elseロジックを追加する方法を学習しました。

このチュートリアルは役に立ちましたか?