赞
踩
1)NVL(s1,s2):若s1不为null,则返回s1,否则返回s2。
SELECT NVL('S', 'R') FROM DUAL; -- S
SELECT NVL(NULL, 'R') FROM DUAL; -- R
2)NVL2(s1,s2,s3):若s1不为null,则返回s2,否则返回s3。
SELECT NVL2('S', 'R1', 'R2') FROM DUAL; -- R1
SELECT NVL2(NULL, 'R1', 'R2') FROM DUAL; -- R2
1)ifnull(s1,s2):和Oracle的NVL(s1,s2)一样,若s1不为null,则返回s1,否则返回s2。所以可以用ifnull函数替代Oracle的NVL函数。
select ifnull('S', 'R'); -- S
select ifnull(null, 'R'); -- R
2)coalesce(s1,s2,…,R):此函数可有多个参数,前面多个参数为判断条件,若非最后一位的参数都为null,则返回最后一位参数R,否则返回第一个非null的参数。当只有两个参数时可替代Oracle的NVL函数。
SELECT coalesce(NULL, 'R'); -- R
SELECT coalesce('S1', 'S2', 'S3', 'R'); -- S1
SELECT coalesce(NULL, 'S2', 'S3', 'R'); -- S2
SELECT coalesce(NULL, NULL, 'S3', 'R'); -- S3
SELECT coalesce('S1', NULL, 'S3', 'R'); -- S1
SELECT coalesce(NULL, NULL, NULL, 'R'); -- R
1)Oracle的NVL()函数可以用 ifnull(s1,s2)、coalesce(s1,R) 这两个函数替代。
2)Oracle的NVL2()函数MySQL无现成函数可替代,只能用case when 来替代。
select case when S1 is not null then R1 else R2 end;
select case when 'S' is not null then 'R1' else 'R2' end; -- R1
select case when null is not null then 'R1' else 'R2' end; -- R2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。