NVL2 関数
指定された式の結果が NULL か NOT NULL かに基づいて、2 つの値のいずれかを返します。
構文
NVL2 ( expression, not_null_return_value, null_return_value )
引数
- expression
-
Null ステータスが評価される列名などの式。
- not_null_return_value
-
expression が NOT NULL に評価された場合に返される値。not_null_return_value 値は、expression と同じデータ型を持つか、そのデータ型に暗黙的に変換可能である必要があります。
- null_return_value
-
expression が NULL に評価される場合に値が返されます。null_return_value 値は、expression と同じデータ型を持つか、そのデータ型に暗黙的に変換可能である必要があります。
戻り型
NVL2 の戻り値の型は、次のように決まります。
-
not_null_return_value または null_return_value が null の場合、not-null 式のデータ型が返されます。
not_null_return_value と null_return_value がどちらも null である場合
-
not_null_return_value と null_return_value のデータ型が同じ場合、そのデータ型が返されます。
-
not_null_return_value と null_return_value の数値データ型が異なる場合、互換性を持つ最小の数値データ型が返されます。
-
not_null_return_value と null_return_value の日時データ型が異なる場合、タイムスタンプデータ型が返されます。
-
not_null_return_value と null_return_value の文字データ型が異なる場合、not_null_return_value のデータ型が返されます。
-
not_null_return_value と null_return_value で数値データ型と数値以外のデータ型が混合している場合、not_null_return_value のデータ型が返されます。
重要
not_null_return_value のデータ型が返される最後の 2 つのケースでは、null_return_value がそのデータ型に暗黙的にキャストされます。データ型に互換性がない場合、関数は失敗します。
使用に関する注意事項
DECODE 関数 は、式と検索パラメータの両方が null の場合、NVL2 と同様の方法で使用できます。異なるのは、DECODE の場合、result パラメータの値とデータ型の両方が戻り値に含められるという点です。一方、NVL2 の場合、not_null_return_value または null_return_value パラメータのうち、どちらか関数により選択された方の値が戻り値に含められますが、データ型については not_null_return_value のデータ型が含められます。
例えば、column1 が NULL の場合、次のクエリは同じ値を返します。ただし、DECODE の戻り値のデータ型は INTEGER となり、NVL2 の戻り値のデータ型は VARCHAR になります。
select decode(column1, null, 1234, '2345'); select nvl2(column1, '2345', 1234);
例
次の例では、一部のサンプルデータを変更し、2 つのフィールドを評価してユーザーに適切な連絡先情報を提供します。
update users set email = null where firstname = 'Aphrodite' and lastname = 'Acevedo'; select (firstname + ' ' + lastname) as name, nvl2(email, email, phone) AS contact_info from users where state = 'WA' and lastname like 'A%' order by lastname, firstname; name contact_info --------------------+------------------------------------------- Aphrodite Acevedo (906) 632-4407 Caldwell Acevedo Nunc.sollicitudin@Duisac.ca Quinn Adams vel@adipiscingligulaAenean.com Kamal Aguilar quis@vulputaterisusa.com Samson Alexander hendrerit.neque@indolorFusce.ca Hall Alford ac.mattis@vitaediamProin.edu Lane Allen et.netus@risusDonec.org Xander Allison ac.facilisis.facilisis@Infaucibus.com Amaya Alvarado dui.nec.tempus@eudui.edu Vera Alvarez at.arcu.Vestibulum@pellentesque.edu Yetta Anthony enim.sit@risus.org Violet Arnold ad.litora@at.com August Ashley consectetuer.euismod@Phasellus.com Karyn Austin ipsum.primis.in@Maurisblanditenim.org Lucas Ayers at@elitpretiumet.com