Welcome 微信登录

首页 / 数据库 / MySQL / Oracle基础教程:单行函数—null值处理函数

null值
是一个很特别的值,既不是0也不是空格.它的值是没有定义,不确定的未知值
比如一个案件的追踪表,警方在对犯罪分子一无所知,但在犯罪分子性别一栏不是男就是女,只是此时还不确定
就可以把性别栏设置为未知,当案件侦破到一定程度,警方知道了犯罪分子的性别,既从未知变成了已知.也就是由NULL变成男或女
 idle> select ename,job,sal,comm from emp where ename in ("SMITH","WARD");ENAME    JOB      SAL       COMM
---------- --------- ---------- ----------
SMITH    CLERK     800
WARD    SALESMAN    1250        500idle> 如上查询结果中 comm 列,一般职员没有奖金,而销售时有奖金的.
这时统计销售人员的薪金就需要加上奖金idle> select ename,job,sal,comm,sal+comm from emp where ename in ("SMITH","WARD");ENAME    JOB      SAL       COMM   SAL+COMM
---------- --------- ---------- ---------- ----------
SMITH    CLERK     800
WARD    SALESMAN    1250        500  1750idle>结果显示 sal + comm为NULL的值 还为NULL我们再去打印COMM为NULL值的员工工资
idle> select ename,sal from emp where comm = NULL;no rows selectedidle>
结果却是没有选中
可见,NULL值为未知 不可以参与运算和比较
正确的写法如下:
idle> select ename,sal,comm from emp where comm is  NULL;ENAME    SAL     COMM
---------- ---------- ----------
SMITH    800
JONES   2975
BLAKE   2850
CLARK   2450
SCOTT   3000
KING   5000
ADAMS   1100
JAMES    950
FORD   3000
MILLER   130010 rows selected.idle> idle> select ename,sal,comm from emp where comm is not  NULL;ENAME    SAL     COMM
---------- ---------- ----------
ALLEN   1600      300
WARD   1250      500
MARTIN   1250     1400
TURNER   1500        0idle> 如果要做运算 可以用NVL NVL2 nullif函数先置为0
NVL(表达式1,表达式2)
 如果表达式1是NULL,则返回表达式2
 如果表达式1非NULL,则返回表达式1
 表达式1和表达式2可以是数字,字符串,日期格式,1和2的数据类型必须一致
idle> select ename,job,sal,comm,sal+NVL(comm,0) from emp where ename in ("SMITH","WARD");ENAME    JOB      SAL       COMM SAL+NVL(COMM,0)
---------- --------- ---------- ---------- ---------------
SMITH    CLERK     800          800
WARD    SALESMAN    1250        500       1750idle>  NVL2(expr1,expr2,expr3)
 如果expr1为空,则返回expr3,否则返回expr2
idle> select ename,job,sal,comm,sal+NVL2(comm,comm,0) from emp where ename in ("SMITH","WARD");ENAME    JOB      SAL       COMM SAL+NVL2(COMM,COMM,0)
---------- --------- ---------- ---------- ---------------------
SMITH    CLERK     800         800
WARD    SALESMAN    1250        500      1750idle> NULLIF(expr1,expr2)
 如果expr1和expr2相同,则返回空,否则返回expr1
idle> select ename,NULLIF(ename,"KING") from emp where ename in ("SCOTT","KING");ENAME    NULLIF(ENA
---------- ----------
SCOTT    SCOTT
KINGidle> 空值的排序 升序会排在最后 降序排在最前
idle> select ename,sal,comm from emp where ename in ("KING","WARD") order by comm;ENAME    SAL     COMM
---------- ---------- ----------
WARD   1250      500
KING   5000idle> select ename,sal,comm from emp where ename in ("KING","WARD") order by comm desc;ENAME    SAL     COMM
---------- ---------- ----------
KING   5000
WARD   1250      500idle> COALESCE(expr1,expr2,expr3,...)
 返回第一个非空的表达式
SQL> select coalesce("","a","","b") from dual;C
-
aSQL> select coalesce("","","","b") from dual;C
-
bSQL> Oracle基础教程:单行函数—类型转换函数Oracle基础教程:单行函数—分支函数相关资讯      oracle数据库教程 
  • Oracle raw数据类型介绍  (01/29/2013 10:05:53)
  • 监听器注册与ORA-12514 错误分析  (11/13/2012 14:30:08)
  • Oracle SQL的cursor理解  (11/13/2012 14:16:17)
  • Oracle 如何强制刷新Buffer Cache  (01/29/2013 10:02:46)
  • dblink致Oracle库的SCN变成两库的  (11/13/2012 14:24:41)
  • Linux操作系统下完全删除Oracle数  (11/13/2012 08:25:52)
本文评论 查看全部评论 (0)
表情: 姓名: 字数