和Null有关的函数

简介: 关于null相关的函数在日常的工作中还有比较实用的,可能会碰到各种和Null校验相关的情况,大体有以下几种。 case when decode nvl nvl2 lnnvl nullif coalsce-->case when case when算是这个比较通用的方法,可以支持各种复杂的逻辑判断,对于Null的校验也不在话下,可能相对来说程序会略显臃肿。


关于null相关的函数在日常的工作中还有比较实用的,可能会碰到各种和Null校验相关的情况,大体有以下几种。
case when
decode
nvl
nvl2
lnnvl
nullif
coalsce

-->case when
case when算是这个比较通用的方法,可以支持各种复杂的逻辑判断,对于Null的校验也不在话下,可能相对来说程序会略显臃肿。在性能方面还没有做更多的测试,暂时不好评估。

SQL> select case when (1=1) then 2 end from dual;  -->如果1=1满足,就返回2,否则返回null

CASEWHEN(1=1)THEN1END
---------------------
                   2

SQL> select case when (1=2) then 2 end from dual;  -如果1=2成立,就返回2,否则返回null

CASEWHEN(1=2)THEN2END
---------------------

 
-->nvl
  select nvl('expr1 is not null','expr1 is  null') from dual;  -->如果expr1不为Null,就输出expr1 is null
NVL('EXPR1ISNOTNU
-----------------
expr1 is not null

SQL>   select nvl(null,'expr1 is null') from dual; -->如果expr1为Null,就输出expr1 is null
NVL(NULL,'EXP
-------------
expr1 is null
 
-->nvl2(expr1,expr2,expr3) 
 If expr1 is not null, then NVL2 returns expr2. If expr1 is null, then NVL2 returns expr3.
SQL>    select nvl2(null,'expr1 is null return expr3','expr1 is not null return expr2') from dual; -->可以看到,expr1为null,就输出了expr3
NVL2(NULL,'EXPR1ISNULLRETURNEX
------------------------------
expr1 is not null return expr2

SQL>    select nvl2('1','expr1 is null return expr3','expr1 is not null return expr2') from dual; -->可以看到expr1不为Null,就输出expr2
NVL2('1','EXPR1ISNULLRETUR
--------------------------
expr1 is null return expr3

-->lnnvl
这个问题可以创建一个表来测试一下,test_null,返回的结果都是相反的。
  create table test_null (id number);
  insert into test_null values(1);
  insert into test_null values(2);
  insert into test_null values(3);

SQL> select id from test_null where lnnvl(id=1
        ID
----------
         1
         2
         3

SQL> select id from test_null where lnnvl(id>=1);  --如果id>=1,就输出id>=1
no rows selected

SQL> select id from test_null where lnnvl(id=1);
        ID
----------
         2
         3

-->nullif
这个函数类似如下的case when形式
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

SQL> select nullif(1,1)from dual;
NULLIF(1,1)
-----------

SQL> select nullif(1,2) from dual;
NULLIF(1,2)
-----------
          1
SQL>  select nullif(2,1)from dual;
NULLIF(2,1)
-----------
          2

SQL> select nullif(1,null)from dual;
NULLIF(1,NULL)
--------------
             1
SQL> select nullif(null,1)from dual; -可以看到如果expr1是Null,会报出ora-00932的错误,如果expr2是null,还是满足条件有输出的。
select nullif(null,1)from dual
              *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CHAR

decode
SQL> select decode(1,1,3,4)from dual;
DECODE(1,1,3,4)
---------------
              3

SQL> select decode(1,2,3,4)from dual;
DECODE(1,2,3,4)
---------------
              4


-->COALSCE
这个函数类似如下case when的形式
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
可以创建一个临时的表来测试一下。可以看到在id1,id2,id3为空的时候输出。
create table test_coalesce (id1 number,id2 number,id3 number);
insert into test_coalesce values(1,null,null);
insert into test_coalesce values(2,1,null);
insert into test_coalesce values(null,null,1);

SQL> select id1,id2,id3 from test_coalesce;
       ID1        ID2        ID3
---------- ---------- ----------
         1
         2          1
                               1
SQL> select coalesce(id1,id2,id3) from test_coalesce;
COALESCE(ID1,ID2,ID3)
---------------------
                    1
                    2
                    1


 

目录
相关文章
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
SQL Oracle 关系型数据库
SQL NULL 函数
SQL NULL 函数
150 1
|
C++ Python
【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误
【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误
241 0
|
关系型数据库 MySQL
mysql中SUM函数返回NULL问题
mysql中SUM函数返回NULL问题
162 0
|
数据挖掘 索引 Python
pandas库中的read_csv函数读取数据时候的路径问题详解(ValueError: embedded null character)
read_csv()函数不仅是R语言中的一个读取csv文件的函数,也是pandas库中的一个函数。pandas是一个用于数据分析和处理的python库。它的read_csv函数可以读取csv文件里的数据,并将其转化为pandas里面的DataFrame对象。它由很多参数可以设置,例如分隔符、编码、列名、索引等。
pandas库中的read_csv函数读取数据时候的路径问题详解(ValueError: embedded null character)
|
SQL 关系型数据库 MySQL
mysql sum函数中对两字段做运算时有null时的情况
mysql sum函数中对两字段做运算时有null时的情况
370 0
解决办法一:GetProcAddress函数返回值总为NULL
解决办法一:GetProcAddress函数返回值总为NULL
395 0
|
Java Kotlin 编译器
Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合
一.基本语法 Kotlin的很多概念跟JAVA是有类似的,所以我应该不会像我的JAVA之旅一样那么的详细,但是不用担心,你会看的很明白的,我也是根据官方的文档来学习的 我们在IDEA中创建一个项目Kotlin02 1.
1744 0
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之从MySQL同步数据到Doris时,历史数据时间字段显示为null,而增量数据部分的时间类型字段正常显示的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章