

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

# NVL2 函數
<a name="NVL2"></a>

根據指定的表達式評估為 NULL 還是 NOT NULL，傳回兩個值中的一個。

## 語法
<a name="NVL2-synopsis"></a>

```
NVL2 ( expression, not_null_return_value, null_return_value )
```

## 引數
<a name="NVL2-arguments"></a>

 *運算式*   
要評估 Null 狀態的表達式，例如欄名。

 *not\$1null\$1return\$1value*   
*expression* 評估為 NOT NULL 時所傳回的值。*not\$1null\$1return\$1value* 值的資料類型必須與 *expression* 相同，或可隱含地轉換為該資料類型。

 *null\$1return\$1value*   
*expression* 評估為 NULL 時所傳回的值。*null\$1return\$1value* 值的資料類型必須與 *expression* 相同，或可隱含地轉換為該資料類型。

## 傳回類型
<a name="NVL2-return-type"></a>

NVL2 傳回類型的決定方式如下：
+ 如果 *not\$1null\$1return\$1value* 或 *null\$1return\$1value* 為 Null，則傳回 not-null 表達式的資料類型。

如果 *not\$1null\$1return\$1value* 和 *null\$1return\$1value* 都不是 Null：
+ 如果 *not\$1null\$1return\$1value* 和 *null\$1return\$1value* 有相同的資料類型，則傳回該資料類型。
+ 如果 *not\$1null\$1return\$1value* 和 *null\$1return\$1value* 有不同的數值資料類型，則傳回最小可相容的數值資料類型。
+ 如果 *not\$1null\$1return\$1value* 和 *null\$1return\$1value* 有不同的日期時間資料類型，則傳回時間戳記資料類型。
+ 如果 *not\$1null\$1return\$1value* 和 *null\$1return\$1value* 有不同的字元資料類型，則傳回 *not\$1null\$1return\$1value* 的資料類型。
+ 如果 *not\$1null\$1return\$1value* 和 *null\$1return\$1value* 有混合的數值和非數值資料類型，則傳回 *not\$1null\$1return\$1value* 的資料類型。

**重要**  
前兩個案例中傳回 *not\$1null\$1return\$1value* 的資料類型，而 *null\$1return\$1value* 會隱含地轉換為該資料類型。如果資料類型不相容，函數會失敗。

## 使用須知
<a name="nvl2-usage-notes"></a>

對於 NVL2，傳回的值將為 *not\$1null\$1return\$1value* 或 *null\$1return\$1value* 參數，以函數選取的值為準，但資料類型為 *not\$1null\$1return\$1value*。

例如，假設 column1 是 NULL，下列查詢會傳回相同的值。不過，DECODE 傳回值的資料類型為 INTEGER，而 NVL2 傳回值的資料類型為 VARCHAR。

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

## 範例
<a name="NVL2-examples"></a>

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

```
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	(555) 555-0100
Caldwell Acevedo 	Nunc.sollicitudin@example.ca
Quinn Adams		   vel@example.com
Kamal Aguilar		 quis@example.com
Samson Alexander	 hendrerit.neque@example.com
Hall Alford		   ac.mattis@example.com
Lane Allen		    et.netus@example.com
Xander Allison	   ac.facilisis.facilisis@example.com
Amaya Alvarado	   dui.nec.tempus@example.com
Vera Alvarez		  at.arcu.Vestibulum@example.com
Yetta Anthony		 enim.sit@example.com
Violet Arnold		 ad.litora@example.comm
August Ashley		 consectetuer.euismod@example.com
Karyn Austin		  ipsum.primis.in@example.com
Lucas Ayers		   at@example.com
```