Oracle入门(十四D)之常规函数
一、NULL處理
(1)函數的計算過程
到目前為止,您已經學會了在簡單語句中應用單行函數。不過,函數可以嵌套任意層。所以,了解嵌套函數的計算過程非常重要。下例就是一個嵌套函數。其計算過程是從最里層開始計算,直到最外層。
SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(聘用日期, 6),'FRIDAY'), 'fmDay, Month DDth, YYYY') AS "下一天計算結果"
FROM 雇員
WHERE 雇員標識=100;
結果為:
Friday, December 18th, 1987
SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(聘用日期, 6),'FRIDAY'), 'fmDay, Month DDth, YYYY') AS "下一天計算結果"FROM 雇員? WHERE 雇員標識=100;
? 步驟 1:在聘用日期基礎上加上六個月。
? 步驟 2:確定聘用日期之后的第一個星期五。
? 步驟 3:轉換默認的日期格式,采用如下格式顯示這個星期五:Friday, December 18th, 1987,在輸出結果中這些內容將顯示在列名“下一天計算結果”下。
(2)涉及 Null 值的函數
在課程開始階段,我們已介紹了“Null”這個術語。您可能還記得,Null 就是不可用、未指定、未知或不適用的值。從根本上講,我們無法測試該值是否與其它值一樣,因為我們不知道它是什么值。它不等于任何值,也不等于零!Null 不代表任何實際值,但這并不意味著它不重要。請想象一下這樣的問題:X = Y 正確嗎?要回答此問題,必須知道 X 和 Y 的值。Oracle 有四個涉及使用null 值的常規函數。這四個函數為:- NVL
- NVL2
- NULLIF
- COALESCE
二、NVL 函數
????NVL 函數可以將 null 值轉換為固定數據類型(日期、字符或數字)的已知值。Null 值列和新值的數據類型必須相同。
該 NVL 函數為:
NVL (可能包含 null 的值或列, 用以替換 null的值)
以下查詢使用字符數據類型的 NVL 函數:select nvl(注釋, '沒有注釋') from d_播放列表曲目;
Null 值列和新值的數據類型必須相同,如下例
所示:
????可以在進行計算之前,使用 NVL 函數將包含null 的列值轉換為數字。對 null 執行算術計算時,結果為 null。NVL 函數可以在進行算術計算之前,將 null 值轉換為數字,以避免結果為 null。
????在本示例中,D_合作伙伴表中的“批準的費用金額”列包含 null 值。NVL 函數用于在進行算術計算之前將 null 更改為零。
三、NVL2 函數
????NVL2 函數對包含三個值的表達式求值。如果第一個值不為 null,則 NVL2 函數返回第二個表達式。如果第一個值為 null,則返回第三個表達式。表達式 1 中的值可以采用任意數據類型。表達式 2 和表達式 3 可以采用 LONG 之外的任意數據類型。返回值的數據類型始終與表達式 2 的數據類型相同,除非表達式 2 是字符數據(在這種情況下,返回值為 VARCHAR2 數據類型)。NVL2 函數是:
????NVL2 (可能包含 null 的表達式 1 值, 表達式 1 不是null 時要返回的表達式 2 值, 表達式 1 是 null 時用以替換 null 的表達式 3 值)
????記憶 NVL2 函數的一個小竅門是:“如果表達式 1 具有值,則返回替代表達式 2;如果表達式 1 是 null,則返回替代表達式 3。”
????在下面所示的 NVL2 函數中,表達式 1 使用數字數據,表達式 2和 3 使用字符數據。select 姓氏, 薪金, nvl2(傭金百分比, 薪金 + (薪金 * 傭金百分比), 薪金) as 收入 from 雇員;
四、NULLIF 函數
NULLIF 函數對兩個函數進行比較。如果它們相等,則函數返回null。如果不相等,則函數返回第一個表達式。
NULLIF 函數為:
nullif(表達式 1, 表達式 2)
select 名字, length(名字) "名字長度",姓氏, length(姓氏) "姓氏長度", nullif(length(名字), length(姓氏)) as "比較結果" from d_合作伙伴;五、COALESCE 函數
????COALESCE 函數是 NVL 函數的擴展,但是COALESCE 函數可以接受多個值。單詞“coalesce”的字面意義是“聯合”,這就是該函數所要執行的操作。????如果第一個函數是 null,則函數會繼續執行下一行,直到找到一個非 null 表達式。當然,如果第一個表達式具有值,則函數將返回第一個表達式并就此結束。
COALESCE 函數為:
COALESCE (表達式 1,表達式 2, ...表達式 n)
分析右側所示的從雇員表進行檢索的 SELECT 語句。
哪些雇員未獲得傭金?您是如何判斷出的?是否有些雇員既未獲得傭金也未獲得薪金?
總結
以上是生活随笔為你收集整理的Oracle入门(十四D)之常规函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivo开大!11月1日将发布自研AI大
- 下一篇: 谢霆锋也要代言华为了?华为放出Mate