1. 程式人生 > >Oracle中coalesce函式的用法

Oracle中coalesce函式的用法

學習了幾天教主的書,今天看到coalesce函式,功能很強大啊!

coalesce函式的引數是列,結果是取出第一個不為空的列的資料。

首先,建一個檢視:

  1. CREATEORREPLACEVIEW v ASSELECTNULLAS c1,NULLAS c2,1 AS c3,NULLAS c4,2 AS c5,NULLAS c6 FROM dual UNIONALLSELECTNULLAS c1,NULLAS c2,NULLAS c3,3 AS c4,NULLAS c5,2 AS c6 FROM dual;  

檢視檢視結果:


使用coalesce函式查結果:

  1. SELECTCOALESCE
     (c1,c2,c3,c4,c5,c6) AS c FROM v;  

結果竟是:


難道coalesce函式不支援number型別?帶著這個疑問,給轉換一下,結果:

  1. SELECTCOALESCE (c1,c2,to_char(c3),to_char(c4),to_char(c5),to_char(c6)) AS c FROM v;  


好像是真的,那麼對date型別的支援呢?試一試

  1. CREATEORREPLACEVIEW v AS
  2. SELECT to_date('20150101','YYYYMMDD'AS c1,NULLAS c2,1 AS c3,NULLAS c4,2 
    AS c5,NULLAS c6 FROM dual  
  3. UNIONALL
  4. SELECTNULLAS c1,NULLAS c2,NULLAS c3,3 AS c4,NULLAS c5,2 AS c6 FROM dual;  

結果竟然:


到這裡就不禁要想,應該不是不支援某種資料型別,而是把第一列的資料型別,作為整個函式的資料型別了。

這樣試試就行了


最後,既然coalesce函式裡面是列,那麼用*代表所有列行不行呢?


顯然是不行的。

總結:

1、coalesce函式是用來獲取第一個不為空的列的值

2、coalesce函式裡面的資料型別,必須全部都跟第一列的資料型別一致

3、CREATE OR REPLACE VIEW v AS SELECT NULL AS c FROM dual;這樣建立的檢視,列c的資料型別是char。