函數中大雜燴

[b][color=red]常用日期函數整理:[/color][/b]
--獲取某個月的最後一天
values( date('2010-01-14') + 1 month - day( date('2010-01-14') + 1 month)day );
--獲取某個月的第一天
values( date('2010-01-14') + 1 month - day( date('2010-01-14') + 1 month)day + 1 day );
--獲取日期爲一週的周幾
values(DAYOFWEEK(date('2010-09-05') -1 day) );
--獲取日期爲一週的周幾(標準)
values(DAYOFWEEK_iso(date('2010-09-05') ) );
--返回參數中一年的第幾周,用範圍在 1-54 的整數值表示。以星期日作爲一週的開始。
values(WEEK_iso(date('2010-09-06')));

[b][color=red]其它輔助函數[/color][/b]

1、DECODE(exp,s1,r1,s2,r2..s,r[,def]) 可以把它理解成一個增強型的if else,只不過它並不通過多行語句,而是在一個函數內實現if else的功能。
exp做爲初始參數。s做爲對比值,相同則返回r,如果s有多個,則持續遍歷所有s,直到某個條件爲真爲止,否則返回默認值def(如果指定了的話),如果沒有默認值,並且前面的對比也都沒有爲真,則返回空。
毫無疑問,decode是個非常重要的函數,在實現行轉列等功能時都會用到,需要牢記和熟練使用。

例如:select decode('a2','a1','true1','a2','true2','default') from dual;

2、GREATEST(n1,n2,...n) 返回序列中的最大值
例如:SELECT GREATEST(15,5,75,8) "Greatest" FROM DUAL;

3、LEAST(n1,n2....n) 返回序列中的最小值
例如:SELECT LEAST(15,5,75,8) LEAST FROM DUAL;

4、NULLIF(c1,c2)
Nullif也是個很有意思的函數。邏輯等價於:CASE WHEN c1 = c2 THEN NULL ELSE c1 END
例如:SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL;

5、NVL(c1,c2) 邏輯等價於IF c1 is null THEN c2 ELSE c1 END。c1,c2可以是任何類型。如果兩者類型不同,則oracle會自動將c2轉換爲c1的類型。
例如:SELECT NVL(null, '12') FROM DUAL;

6、NVL2(c1,c2,c3) 大家可能都用到nvl,但你用過nvl2嗎?如果c1非空則返回c2,如果c1爲空則返回c3
例如:select nvl2('a', 'b', 'c') isNull,nvl2(null, 'b', 'c') isNotNull from dual;
發佈了46 篇原創文章 · 獲贊 0 · 訪問量 4317
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章