coalesce函數的參數是列,結果是取出第一個不爲空的列的數據。
首先,建一個視圖:
- CREATE OR REPLACE VIEW v AS SELECT NULL AS c1,NULL AS c2,1 AS c3,NULL AS c4,2 AS c5,NULL AS c6 FROM dual UNION ALL SELECT NULL AS c1,NULL AS c2,NULL AS c3,3 AS c4,NULL AS c5,2 AS c6 FROM dual;
查看視圖結果:
使用coalesce函數查結果:
- SELECT COALESCE (c1,c2,c3,c4,c5,c6) AS c FROM v;
結果竟是:
難道coalesce函數不支持number類型?帶着這個疑問,給轉換一下,結果:
- SELECT COALESCE (c1,c2,to_char(c3),to_char(c4),to_char(c5),to_char(c6)) AS c FROM v;
好像是真的,那麼對date類型的支持呢?試一試
- CREATE OR REPLACE VIEW v AS
- SELECT to_date('20150101','YYYYMMDD') AS c1,NULL AS c2,1 AS c3,NULL AS c4,2 AS c5,NULL AS c6 FROM dual
- UNION ALL
- SELECT NULL AS c1,NULL AS c2,NULL AS c3,3 AS c4,NULL AS 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。