iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
自我挑戰組

Oracle資料庫系列 第 13

[Day13]空值轉換函數

前幾篇文章提及過,當資料表數值為空值時有三種情況,分別為:

  1. 目前不知道其值
  2. 未指派
  3. 沒有值

但不管是何種情況,在SQL當中空值相當於運算中的無限大,必須加以轉換後才能處理,而轉換函數又分為四種:

  1. NVL():將任意資料類型的空值欄位轉換成目標值
    下面是簡單的舉例:
NVL(commission_pct,0)

解釋:如果commission_pct為空值,則輸出0。

NVL(hire_date,'01-Jan-2014')

解釋:如果hire_date為空值,則輸出'01-Jan-2014'。

  1. NVL2():如果expr1不為空值,則輸出expr2;如果expr1為空值,則輸出expr3。
    下面是簡單的舉例:查詢HR帳戶中employees資料表中,部門50和部門80員工薪水及紅利百分比,且計算年收入。
SELECT last_name, salary, commission_pct,
salary*(1+NVL2(commission_pct, commission_pct,0))*12"年收入"
FROM employees
WHERE department_id IN (50,80);

執行結果如下:
https://ithelp.ithome.com.tw/upload/images/20210928/20140915OZ9QAtlArC.png

  1. NULLIF:如果expr1等於expr2,輸出空值;如果expr1不等於expr2,輸出expr1。
    下面是簡單的舉例:查詢HR的employees資料表,並比對員工的姓名長度。若相同則在比對結果中顯示NULL;不相同則顯示名字長度。
SELECT first_name, LENGTH(first_name)"名字字數",
last_name, LENGTH(last_name)"姓氏字數",
NULLIF(LENGTH(first_name),LENGTH(last_name))比對結果
FROM employees;

執行結果如下:
https://ithelp.ithome.com.tw/upload/images/20210928/20140915PRyX89lt7i.png

  1. COALESCE:輸出引數數列中第一個非空值的值。
    下面是簡單的舉例:查詢HR中employees資料表,無上司且無紅利的員工,在欄位上顯示"他是老闆"。
SELECT last_name,employee_id,
COALESCE (TO_CHAR(commission_pct),TO_CHAR(manager_id),
'他是老闆')
FROM employees;

執行結果如下:
https://ithelp.ithome.com.tw/upload/images/20210928/20140915p0wOzp5MMM.png


上一篇
[Day12]資料類型轉換
下一篇
[Day14]資料表合併實做
系列文
Oracle資料庫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言