学习了几天教主的书,今天看到coalesce函数,功能很强大啊!

coalesce函数的参数是列,结果是取出第一个不为空的列的数据。

首先,建一个视图:

[sql] view plain copy
  1. 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;  

查看视图结果:

oracle中函数的使用

使用coalesce函数查结果:

[sql] view plain copy
  1. SELECT COALESCE (c1,c2,c3,c4,c5,c6) AS c FROM v;  

结果竟是:

oracle中函数的使用

难道coalesce函数不支持number类型?带着这个疑问,给转换一下,结果:

[sql] view plain copy
  1. SELECT COALESCE (c1,c2,to_char(c3),to_char(c4),to_char(c5),to_char(c6)) AS c FROM v;  

oracle中函数的使用

好像是真的,那么对date类型的支持呢?试一试

[sql] view plain copy
  1. CREATE OR REPLACE VIEW v AS  
  2. SELECT to_date('20150101','YYYYMMDD'AS c1,NULL AS c2,1 AS c3,NULL AS c4,2 AS c5,NULL AS c6 FROM dual  
  3. UNION ALL  
  4. SELECT NULL AS c1,NULL AS c2,NULL AS c3,3 AS c4,NULL AS c5,2 AS c6 FROM dual;  

结果竟然:

oracle中函数的使用

到这里就不禁要想,应该不是不支持某种数据类型,而是把第一列的数据类型,作为整个函数的数据类型了。

这样试试就行了

oracle中函数的使用

最后,既然coalesce函数里面是列,那么用*代表所有列行不行呢?

oracle中函数的使用

显然是不行的。


总结:

1、coalesce函数是用来获取第一个不为空的列的值

2、coalesce函数里面的数据类型,必须全部都跟第一列的数据类型一致

3、CREATE OR REPLACE VIEW v AS SELECT NULL AS c FROM dual;这样建立的视图,列c的数据类型是char。


select * from rating;

oracle中函数的使用

     select t1.reference,coalesce(t2.risk_bucket,t1.risk_bucket)  as risk_bucket
              from rating t1
              left join rating t2
                on t1. reference = t2.reference
               and t2.rnk = 2
             where t1.rnk = 1

             oracle中函数的使用


相关文章: