lightdb对nvl/nvl2函数的增强支持

一,关于nvl/nvl2函数

        a) NVL( expr1, expr2);
        功能:判断expr1是否为空返回对应的值。如果expr1为NULL,则函数返回expr2的值
          ,否则返回expr1的值。

        b) NVL2(expr1, expr2, expr3); 
             功能: 根据指定值是否为 NULL 返回对应的值。当expr1为 NULL 时,返回expr2。
         当它不为NULL 时,返回expr1。

二,lightdb下的nvl/nvl2

        因为lightdb是基于postgresql的,所以可以通过集成orafce扩展来兼容oracle, 然而原生的orafce对这两个函数的类型支持比较有限。为了更好的兼容oracle,所以我们对orafce的nvl/nvl2函数类型做了一些相应的扩展。

三,增强的nvl

      1,nvl支持函数参数类型

        a)    nvl(Numeric Types, Character Types) 
        b)    nvl(Character Types, Numeric Types)  
        c)    nvl(Date/Time/timestamp Types,Character Types) 
        d)    nvl(Character Types,Date/Time/timestamp Types) 
        e)    nvl(Date/Time/timestamp Types,Numeric Types)  
        f)    nvl(Numeric Types,Date/Time/timestamp Types)  
        g)    nvl(text,clob)                     
        h)    nvl(clob,text)                         

      2,用法示例

        a)  select nvl(1, 'ab'::text);
             nvl 
            -----
             ab
            (1 row)

       b) select nvl('2022-01-01'::date, '1'::text);
            nvl     
        ------------
         2022-01-01
        (1 row)

      c) select nvl(null::date, '1'::text);
         nvl 
        -----
         1
        (1 row)

4,增强的nvl2

      1,nvl2支持函数参数类型

        a)    nvl2(Numeric Types, Character Types, Character Types); 
        b)    nvl2(Character Types, Numeric Types, Numeric Types);
        c)    nvl2(Date/Time/timestamp Types, Character Types, Character Types);  
        d)    nvl2(Character Types, Date/Time/timestamp Types, Date/Time/timestamp Types); 
        e)    nvl2(Date/Time/timestamp Types, Numeric Types, Numeric Types);     
        f)    nvl2(Numeric Types, Date/Time/timestamp Types, Date/Time/timestamp Types); 
        g)    nvl2(text, clob, clob);
        h)    nvl2(clob, text, text);

      2,用法示例

       a)  select nvl2(1.1, 'a'::text, 'b'::text);
         nvl2 
        ------
         a
        (1 row)

       b) select nvl2('2022-01-01'::date,'1'::text, '2'::text);
         nvl2 
        ------
         1
        (1 row)

       c)  select nvl2(null, '2022-01-01'::date, '2022-01-03'::date);
            nvl2    
        ------------
         2022-01-03
        (1 row)

5,其他说明

 目前对nvl/nvl2的虽然已经能满足绝大部分的场景,但仍然有限,后续将视需要再做扩展,争取做到对oracle实现100%的兼容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值