NVL、NVL2场景分析

NVL、NVL2场景分析


  今天在实际在线运行的项目中遇到了界面显示的问题,界面显示拼接的字段时,部分显示多了一些不太雅观的“–”,格式如“XXXX–”。

  。。。。。。

  具体问题详见如下的截图:

具体问题截图


  聪明的你发现什么问题了吗?查询出的数据部分后面多了 2 个横线!

  。。。。。。

  如果没有什么好办法,那先看 Oracle 中的 2 个方法吧!


-- NVL
    语法:
        nvl(expr1,expr2)
    如果 expr1 是 null 值,则 nvl 函数返回 expr2 ,否则就返回 expr1 。 
    说明:
    参数 expr1、expr2 可以是任何数据类型,但应该保持相同。
    若两者数据类型不一致,则Oracle数据库会隐式的转换其中一个的数据类型使其保持和另一个一致,若无法转换则会返回错误。

    隐式转换的实施规则如下:
        (1)若 expr1 是字符数据,则Oracle数据库在比较之前就会把 expr2 转换成 expr1 的数据类型,并且返回VARCHAR2 数据类型到 expr1 的字符集。

        (2)若 expr1 是数值型,则Oracle数据库决定哪个参数具有最高数值优先级,并把另一个参数的数据类型隐式转换成这种数据类型,并返回这种数据类型的数据。

        (3)如果两个参数都为NULL ,则返回NULL。

    不过NVL依旧不能解决问题啊?最后用NVL2()函数,进行了选择性的判断,问题得以解决。
-- NVL2
    语法:
    nvl2(expr1,expr2,expr3)
    如果 expr1 不是 null 值,则 nvl 函数返回 expr2 ,否则就返回 expr3 。参数可以返回任何数据类型的值,但是 expr2 和 expr3 不能是 LONG 型的数据类型。
    说明:
    若 expr2 和 expr3 的数据类型不同:
    (1)若 expr2 是字符数据,则Oracle数据库在比较之前就会把 expr3 转换成 expr2 的数据类型除非 expr3 是null。在 这种情况下,隐式数据转换是不必要的。

    (2)若 expr2 是数值型,则Oracle数据库决定哪个参数具有最高数值优先级,并把另一个参数的数据类型隐式转换成这种数据类型,并返回这种数据类型的数据。

  看完 NVL 和 NVL2 的具体含义,相信你应该有所眉目了,下面直接贴出实验sql语句和查询结果截图。

   操作实例相关sql语句:

--[1]创建用户表
CREATE TABLE userr (
       NAME VARCHAR2(50),
       email VARCHAR2(50));

--[2]批量插入用户数据 
-- 如果想进一步了解批量插入,可以查考相关博文(下面已给出链接)
INSERT INTO userr(NAME,email)
       SELECT '张三','123@qq.com' FROM dual
       UNION ALL SELECT '李四','456@qq.com' FROM dual
       UNION ALL SELECT '王五','' FROM dual
       UNION ALL SELECT '小王','789@qq.com' FROM dual
       UNION ALL SELECT '小程','' FROM dual
       UNION ALL SELECT '小梁','129@qq.com' FROM dual;

--[3]实例相关查询语句
SELECT u.name || '--' || u.email FROM userr u;

SELECT u.name || NVL2(u.email,'--','') || u.email FROM userr u;

 解决后的结果截图:

解决后的结果


最后: Oracle 批量插入数据 相关博文连接 —— 想了解请点我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xsimah

创作不易,感谢客官的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值