一,oracle下的函数说明(详见链接)

a) nvl函数

b) nvl2函数

c) 隐式转换表

二,nvl/nvl2函数返回类型

通过上述官方文档,我们发现nvl/nvl2函数的返回值分别是以参数1/参数2的数据类型为参考的。当返回值能被转换成参数1/参数2所对应的数据类型时,则转换后再返回;如果无法转换,则报错。

另外一种特殊的情况是数字类型,不管是nvl/nvl2还是decode/decode函数,为了防止精度丢失,oracle总是返回的类型,总是以参数中精度最大那个为准。以下是oracle官方文档的原文描述。

  • If expr2 is numeric data, then Oracle Database determines which argument has the highest numeric precedence, implicitly converts the other argument to that data type, and returns that data type.

三, lightdb对nvl/nvl2的支持

a) lightdb中对nvl的函数定义(nvl2同理)

List of functions
 Name |      Result data type       |        Argument data types      
--------+------+-----------------------------+------------------------------------+------
 nvl  | bit                                           | bit, "any"                         
 nvl  | bytea                                      | bytea, "any"                       
 nvl  | date                                        | date, "any"                        
 nvl  | numeric                                  | double precision, "any"            
 nvl  | numeric                                  | integer, "any"                     
 nvl  | numeric                                  | numeric, "any"                     
 nvl  | text                                         | text, "any"                        
 nvl  | timestamp without time zone | timestamp without time zone, "any" 
 nvl  | timestamp with time zone      | timestamp with time zone, "any"    
 nvl  | time without time zone           | time without time zone, "any"

b) 使用示例

1,     select pg_typeof(nvl('A', 1)), nvl('A', 1);
            pg_typeof | nvl 
            -----------+-----
             text      | A
            (1 row)

2,     select pg_typeof(nvl(1.1, null)), nvl(1.1, null);
            pg_typeof | nvl 
            -----------+-----
             numeric   | 1.1
            (1 row)

3,     select pg_typeof(nvl(to_date('2022-01-01', 'yyyy-mm-dd'), null)), nvl(to_date('2022-01-01', 'yyyy-mm-dd'), null);

pg_typeof          |         nvl         
        -----------------------------+---------------------
         timestamp without time zone | 2022-01-01 00:00:00

c)  lightdb中nvl/nvl2 特殊情况的说明

expr1 为 null 时返回的类型取决于数据的来源。 执行下面的例子时,根据隐式转换规则,null实际上是未知类型,所以调用的函数是nvl(text, 'any')所以函数返回text类型。

lightdb@test=# select pg_typeof(nvl(null, 1)), nvl(null, 1);
        pg_typeof | nvl 
        -----------+-----
        text      | 1
        (1 row)

在下面的例子中,由于数据库中的null字段是int类型,所以函数返回一个numric类型。

create table test_nvl (id int, func varchar(20));
        insert into test_nvl values (null, 'nvl');

lightdb@test=# select pg_typeof(nvl(id, 1)), nvl(id, 1)  from test;
        pg_typeof | nvl 
        -----------+-----
        numeric   |   1
        (1 row)

因为ltrim返回的类型是text,所以下面例子中实际调用的函数是nvl(text, "any"),所以函数返回的是text类型。

lightdb@test=# select pg_typeof(nvl(ltrim(func, 'nvl'), 1)), nvl(ltrim(func, 'nvl'), 1) from test;
         pg_typeof | nvl 
        -----------+-----
         text      | 1
        (1 row)

lightdb对oracle的nvl/nvl2函数的支持相关推荐

  1. Oracle中nvl(), nvl2()函数的区别

    nvl(expr1, expr2) 表示:如果expr1为NULL,则nvl返回expr2.如果expr1不是NULL,则nvl返回expr1. nvl2(expr1, expr2, expr3) 表 ...

  2. mysql 类似 nvl,浅谈mysql可有类似oracle的nvl的函数

    浅谈mysql可有类似oracle的nvl的函数 要用ifnull,而不是isnull isnull是判断是否为null,返回值是1表示null或者0表示不为空 ifnull等同于oracle的nvl ...

  3. oracle nvl2 mysql_Oracle 之 NVL(),NVL2()函数

    概述: NVL函数是Oracle/PLSQL中的一个函数. 而NVL2()是Oracle在NVL函数的功能上扩展. ------------------------------------------ ...

  4. mysql nvl2 函数_Oracle nvl(),nvl2()函数介绍

    NVL函数 Oracle/PLSQL中的一个函数. 格式为: NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值, ...

  5. oracle 中的 NVL2() 函数

    oracle 中的 NVL2() 类似于 mysql 中的 ifnull() 函数 例子:NVL2(id, 1, 0) as status, 如何 id=null, status = 0,否者 sta ...

  6. oracle---函数(trunc,nvl,nvl2)

    --oracel  decode 功能:判断字符串是否一样DECODE(value,if1,then1,if2,then2,if3,then3,...,else) 含义为 IF 条件=值1 THEN ...

  7. Oracle中验证非空的函数NVL(),NVL2()总结

    1.NVL()函数 NVL函数的格式如下: NVL(expr1,expr2) 含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值. 2 N ...

  8. oracle中的NVL,NVL2,NULLIF,COALESCE函数使用

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  9. Oracle NVL()和NVL2()函数

    NVL函数的功能是实现空值的转换,根据第一个表达式的值是否为空值来返回响应的列名或表达式,主要用于对数据列上的空值进行处理,语法格式如:NVL( string1, replace_with),但此函数 ...

最新文章

  1. 信息工程大学806自主命题2020年回忆版真题2020年信息工程大学,初试806回忆版
  2. golang 解析html
  3. 线程中这么调用类_「手撕面试官」谈谈你对JDK中Executor的理解?
  4. “云”端的语雀:用 JavaScript 全栈打造商业级应用
  5. 近期“速卖通母婴行业需求暴增”,带你了解母婴行业选品趋势
  6. mysql 索引 lt =,当同时使用gt; =和lt; =时如何索引MySQL表?
  7. designer pyqt5 界面切换_PyQT5堆叠布局:切换界面(QStackedLayout)
  8. 利用ESXI-Customizer制作定制化的ESXI
  9. DeepMatch推荐系统中的常用算法——Youtube的DeepMatch
  10. C#开发Android应用实战
  11. 用计算机破解vivo手机数字密码,vivo手机咋样在电脑上解锁?看vivoy66解锁密码找答案。...
  12. HTML5前端教程分享:JavaScript学习指南
  13. 逻辑回归案例模板——信用卡欺诈检测
  14. HTML项目答辩演讲稿,办公楼毕业设计答辩演讲稿(答辩自述)
  15. 鸿蒙太空是什么意思,我所居兮,青埂之峰:我所游兮,鸿蒙太空,谁与我逝兮,吾谁与从?渺渺茫茫兮归彼大荒!什么意思?求解...
  16. 饿了么分布式服务治理及优化经验
  17. 虚幻4引擎开发使用感受
  18. JAVA无法读取jvm.cfg_“could not open `C:\Program Files\Java\jre7\lib\amd64\jvm.cfg”问题解决办法...
  19. Head First Java资源
  20. 【转】调优方法——warmup

热门文章

  1. React主流开源UI库分析(附优质管理端模板)
  2. 微信小程序实现 登录 退出功能 以及简单的我的页面附上源代码拷贝直接用
  3. 使用重心坐标插值三角形顶点的任何属性
  4. vos常见的错误代码
  5. 特权级保护和任务切换
  6. 分享一款特别好用的js解密网站
  7. 微信小程序AR引擎kivicube v2版正式上线啦
  8. couple和double的区别_couple是什么意思_couple在线翻译_英语_读音_用法_例句_海词词典...
  9. 零基础玩转ROS小车
  10. 货运物流app开发 为货主和物流公司提供一个方便的平台