DECODE は、そのシグネチャに応じて 2 つの異なる目的を果たします:
DECODE(expression, search, result[, ...][, default])— 式を結果値にマップします。これは IF-THEN-ELSE チェーンに相当します。STRING DECODE(BINARY str, STRING charset)— 指定されたエンコーディングを使用してバイナリ値を文字列に変換します。
IF-THEN-ELSE 分岐選択
構文
DECODE(<expression>, <search>, <result>[, <search>, <result>]...[, <default>])パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
expression | はい | 選択式。各 search 値はこの式と比較されます。 |
search | はい | expression と比較する検索式。この値が expression と一致する場合、対応する result が返されます。複数の search が一致する場合、最初に一致した結果のみが返されます。 |
result | はい | 対応する search が expression と一致した場合に返される値。NULL でない result 値はすべて同じデータの型である必要があります。そうでない場合、エラーが返されます。 |
default | いいえ | どの search も expression と一致しない場合に返される値。指定しない場合、デフォルトで NULL になります。 |
標準 SQL のCASE式ではNULL = NULLが false として扱われますが、DECODEは 2 つの NULL 値を等しいと見なします。NULL のexpressionは NULL のsearch値と一致し、対応するresultを返します。
戻り値
一致する search が見つかった場合は result を返し、一致が見つからない場合は default を返し、default が指定されていない場合は NULL を返します。
search と expression の値は同じデータの型である必要があります。そうでない場合、エラーが返されます。
例
次の例では、sale_detail テーブルを使用します:
+------------+-------------+-------------+------------+------------+
| shop_name | customer_id | total_price | sale_date | region |
+------------+-------------+-------------+------------+------------+
| s1 | c1 | 100.1 | 2013 | china |
| s2 | c2 | 100.2 | 2013 | china |
| s3 | c3 | 100.3 | 2013 | china |
| null | c5 | NULL | 2014 | shanghai |
| s6 | c6 | 100.4 | 2014 | shanghai |
| s7 | c7 | 100.5 | 2014 | shanghai |
+------------+-------------+-------------+------------+------------+例 1: デフォルト値で値をマップする
customer_id をラベルにマップし、認識されない値には Others を返します。NULL の customer_id は NULL の検索値と一致し、N/A を返します。
SELECT DECODE(customer_id,
'c1', 'Taobao',
'c2', 'Alipay',
'c3', 'Aliyun',
NULL, 'N/A',
'Others') AS result
FROM sale_detail;結果:
+------------+
| result |
+------------+
| Others |
| Others |
| Others |
| Taobao |
| Alipay |
| Aliyun |
+------------+例 2: デフォルトを省略する
default が省略され、一致する search がない場合、DECODE は NULL を返します。
SELECT DECODE(customer_id,
'c1', 'Taobao',
'c2', 'Alipay',
'c3', 'Aliyun') AS result
FROM sale_detail;結果:
+------------+
| result |
+------------+
| Taobao |
| Alipay |
| Aliyun |
| NULL |
| NULL |
| NULL |
+------------+customer_id の値が c5、c6、c7 の行には、一致する search エントリがないため、NULL が返されます。
エンコード形式による文字列のデコード
構文
STRING DECODE(BINARY <str>, STRING <charset>)パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
str | はい | デコードするバイナリ値。BINARY 型である必要があります。 |
charset | はい | 使用する文字コード。有効な値: UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。ISO-8859-1 と US-ASCII は英字のみをサポートします。 |
戻り値
STRING 型の値を返します。str または charset が NULL の場合、NULL を返します。
例
例 1: UTF-8 で文字列をエンコードおよびデコードする
SELECT DECODE(ENCODE("English Sample", "UTF-8"), "UTF-8");結果:
+-----------------+
| _c0 |
+-----------------+
| English Sample |
+-----------------+例 2: NULL パラメーター
いずれかのパラメーターが NULL の場合、結果は NULL になります。
SELECT DECODE(ENCODE("English Sample", "UTF-8"), NULL);結果:
+------+
| _c0 |
+------+
| NULL |
+------+関連関数
DECODE は、その他の関数と文字列関数の両方のカテゴリに属します。関連する関数の完全なリストについては、「その他の関数」と「文字列関数」をご参照ください。