本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
根據指定的表達式評估為 NULL 還是 NOT NULL,傳回兩個值中的一個。
語法
NVL2 ( expression, not_null_return_value, null_return_value )
引數
- 運算式
-
要評估 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 的資料類型,而 null_return_value 會隱含地轉換為該資料類型。如果資料類型不相容,函數會失敗。
使用須知
當 expression 和 search 參數都為 null 時,可以用類似於 NVL2 的方式來使用 DECODE 函數。差別在於 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);
範例
下列範例修改一些範例資料,然後評估兩個欄位來提供使用者的適當聯絡資訊:
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