NVL2 関数 - Amazon Redshift

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_valuenull_return_value がどちらも null である場合

  • not_null_return_valuenull_return_value のデータ型が同じ場合、そのデータ型が返されます。

  • not_null_return_valuenull_return_value の数値データ型が異なる場合、互換性を持つ最小の数値データ型が返されます。

  • not_null_return_valuenull_return_value の日時データ型が異なる場合、タイムスタンプデータ型が返されます。

  • not_null_return_valuenull_return_value の文字データ型が異なる場合、not_null_return_value のデータ型が返されます。

  • not_null_return_valuenull_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