当前位置:   article > 正文

Oracle与MySQL差异之空值替换--Oracle NVL、NVL2与 MySQL ifnull、coalesce_mysql nvl2

mysql nvl2

Oracle与MySQL差异之空值替换–Oracle NVL、NVL2与 MySQL ifnull、coalesce

1 Oracle数据库的空值转换有2个函数,分别是NVL、NVL2。

1)NVL(s1,s2):若s1不为null,则返回s1,否则返回s2。

SELECT NVL('S', 'R') FROM DUAL;   -- S
SELECT NVL(NULL, 'R') FROM DUAL;  -- R
  • 1
  • 2

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
  • 2

2 MySQL数据库的空值转换也有2个函数,分别是ifnull、coalesce。

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
  • 1
  • 2

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
  • 2
  • 3
  • 4
  • 5
  • 6

3 MySQL替换Oracle

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
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/686353
推荐阅读
相关标签
  

闽ICP备14008679号