Oracle中的NULL、’’(空字符串)以及’_’(空格)

Oracle中的NULL、’’(空字符串)以及’_’(空格)

 

在Oracle中使用 null''(空字符串),'_'(空格)时,有没有遇到问题?产生疑惑?

null’’(空字符串)是一个意思

注: 为了便于区分空字符串和空格,下面的示例均以 _ 代表空格

举个例子:

1         --建表
2         create table tbl_a (col_a varchar2(1), col_b int);  
3     
4         --  造数据
5         insert into tbl_a values(‘_’, 1); --  插入空格
6         insert into tbl_a values(‘’, 2); --  插入空字符串
7         insert into tbl_a values(null, 3); --  插入NULL


以上SQL执行成功后,执行 select 来检查:

1   select count(*) from tbl_a; -- 结果是 3 
2   select count(*) from tbl_a where col_a = ‘_’;  -- 结果是 1 
3   select count(*) from tbl_a where col_a = ‘’;  -- 结果是 0 
4   select count(*) from tbl_a where col_a is null; -- 结果是 2 

 


注意: 由于 ‘’ (空串)默认被转换成了 NULL,不能使用 = ‘’ 作为查询条件。也不能用 is ‘’。虽然不会有语法错误,但是不会有结果集返回。 只能用 is null

不等于就是 is not null

进一步验证:

select nvl(col_a, ‘a’) from tbl_a; 



结果:
  NVL(COL_A,’A’)
1  
2 a
3 a

原来,在Oracle中,null’’(空字符串)是一个意思。

 


分析函数与NULL

在使用AVG,MAX,SUM,COUNT等函数时,为NULL的纪录会被忽略。

再插入几条数据:

1 insert into tbl_a values(null, null); --  插入NULL
2 -- 执行成功。
3 -- 再次证明,’’ 被当作了null处理.
4 -- 因为该字段是 int 类型,如果是字符串,执行会报错
5 insert into tbl_a values(‘a’, ‘’); 

 

查看数据:

select * from tbl_a; 

 

结果如下:
COL_A COL_B
_ 1
  2
  3
   
a  

 

_ 代表空格

其余空白处表示 NULL

验证:

1 select AVG(col_b) from tbl_a; -- 结果为 2 ,NULL的纪录行忽略掉了
2 select MAX(col_b) from tbl_a; -- 结果为 3
3 select SUM(col_b) from tbl_a; -- 结果为 6
4 select COUNT(col_b) from tbl_a; -- 结果为 3 
5 select COUNT(col_a) from tbl_a; -- 结果为 2
6 select COUNT(*) from tbl_a; -- 结果为 5 

 

排序时,NULL作为无穷大处理。

select * from tbl_a order by col_b desc ; 


结果如下:
COL_A COL_B
   
a  
  3
  2
_ 1

 

参考:http://blog.csdn.net/weiwenhp/article/details/7035327

 

阅读原文

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109144.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hpStorm 10.0.1 激活码[在线序列号]

    hpStorm 10.0.1 激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    45
  • 【摄像头】图像传感器尺寸、像素大小和成像质量的关系

    【摄像头】图像传感器尺寸、像素大小和成像质量的关系1、图像传感器的尺寸(靶面大小)越大,成像质量越好如果相同分辨率的相机,传感器面积越大,则其单位像素的面积也越大,成像质量也会越好。同样的500万像素的摄像头,2/3”的传感器成像质量就要优于1/2”的。2、图像传感器的尺寸单位换算图像传感器的尺寸大小是指靶面对角线的长度,单位为英寸,1英寸等于16mm。这样1/2”传感器对角线长度则为8mm,按照一般的传感器的长宽比为4:3的话,那么就对应勾股定理,1/2”的传感器长宽分辨率为6.4mm、4.8mm。如某相机的分辨率为25881940的500万像素

    2022年6月10日
    68
  • select top 用法

    select top 用法access:selecttop(10)*fromtable1where1=1 db2:selectcolumnfromtablewhere1=1fetchfirst10rowsonly 取第三行到第5行的记录select*from(selectrow_number() over()asrowfromtable)ast

    2022年7月13日
    33
  • bs和cs架构的区别和优缺点_百年灵b1p1和b1x1区别

    bs和cs架构的区别和优缺点_百年灵b1p1和b1x1区别BS和CS架构的区别BS就是浏览器服务器架构(网站)CS就是需要安装的那些应用程序app二者比较:标准:BS开发更标准一些,因为CS需要在不同的系统上执行,BS只需要在浏览器上执行效率:CS效率更高,CS属于安装的软件,很多内容已经安装在电脑中了,只需要联网获取数据即可,而BS运行在浏览器上,所有的数据必须经过下载才能使用;升级:BS无缝升级,CS需要删除老版本,再安装新版本安全性:CS更为安全,因为必须安装软件才能使用;BS安全度较低,只要有浏览器就可以使用开发成本:CS开发成本更高

    2022年10月17日
    0
  • SpringSecurity(十四)—RememberMe功能实现

    SpringSecurity(十四)—RememberMe功能实现

    2020年11月12日
    217
  • android 触屏事件总结

    android 触屏事件总结如果view的down事件返回true,则接下去的move,up,cancel,事件最多传递到这个view,不会传递给view的子view如果所有的view的down事件都返回false,则后续的move,up,cancel,事件都不会传递给所有的view。所以,可以总结,就是down事件决定了触屏事件传递链的最后一个view如果viewX的down事件返回

    2022年9月11日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号