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%的兼容。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部