您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 衡水分类信息网,免费分类信息发布

Oracle基础教程:单行函数—null值处理函数

2024/6/24 23:47:17发布12次查看
null值是一个很特别的值,既不是0也不是空格.它的值是没有定义,不确定的未知值比如一个案件的追踪表,警方在对犯罪分子一无所知,但
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        500
idle>
如上查询结果中 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  1750
idle>
结果显示 sal + comm为null的值 还为null
我们再去打印comm为null值的员工工资
idle> select ename,sal from emp where comm = null;
no rows selected
idle>
结果却是没有选中
可见,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   1300
10 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        0
idle>
如果要做运算 可以用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       1750
idle>
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      1750
idle>
nullif(expr1,expr2)
 如果expr1和expr2相同,则返回空,否则返回expr1
idle> select ename,nullif(ename,'king') from emp where ename in ('scott','king');
ename    nullif(ena
---------- ----------
scott    scott
king
idle>
空值的排序 升序会排在最后 降序排在最前
idle> select ename,sal,comm from emp where ename in ('king','ward') order by comm;
ename    sal     comm
---------- ---------- ----------
ward   1250      500
king   5000
idle> select ename,sal,comm from emp where ename in ('king','ward') order by comm desc;
ename    sal     comm
---------- ---------- ----------
king   5000
ward   1250      500
idle>
coalesce(expr1,expr2,expr3,...)
 返回第一个非空的表达式
sql> select coalesce('','a','','b') from dual;
c
-
a
sql> select coalesce('','','','b') from dual;
c
-
b
sql>

衡水分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录