NVL2函數 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

NVL2函數

根據指定的運算式是否評估為NULL或,傳回兩個值的其中一個NOTNULL。

語法

NVL2 ( expression, not_null_return_value, null_return_value )

引數

運算式

要評估 Null 狀態的表達式,例如欄名。

not_null_return_value

如果表達式評估為返回的值NOTNULL。not_null_return_value 值的資料類型必須與 expression 相同,或可隱含地轉換為該資料類型。

null_return_value

如果表達式評估為返回的值NULL。null_return_value 值的資料類型必須與 expression 相同,或可隱含地轉換為該資料類型。

傳回類型

返NVL2回類型確定如下:

  • 如果 not_null_return_valuenull_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 的資料類型,而 null_return_value 會隱含地轉換為該資料類型。如果資料類型不相容,函數會失敗。

使用須知

DECODE函數可以用類似於運算式搜尋參數都為 null NVL2 時的方式使用。不同之處在於DECODE,對於,返回將同時具有結果參數的值和數據類型。相較之下,對於NVL2,傳回的值將具有無 _null_return 值或空值參數 (以函數選取者為準) 的值,但資料類型會是否為 not _null_return_value

例如,假設 column1 是NULL,下面的查詢將返回相同的值。然而,返DECODE回值的數據類型將是INTEGER和NVL2返回值的數據類型將是VARCHAR。

select decode(column1, null, 1234, '2345'); select nvl2(column1, '2345', 1234);

範例

下列範例修改一些範例資料,然後評估兩個欄位來提供使用者的適當聯絡資訊:

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