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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ubuntu18.04下VIM安装及配置

    Ubuntu18.04下VIM安装及配置作者:陈浩 更新日期:2018-09-211.安装VIM $sudoapt-getinstallvim我的vim已经是最新版(2:8.0.1453-1ubuntu1)。2.安装vim-plug一种方便简洁的插件管理插件终端输入如下命令: $curl-fLo~/.vim/autoload/plug.vim–create-dirshttps://raw.gi…

    2022年9月30日
    3
  • java实现发送手机验证码功能

    java实现发送手机验证码功能1.进入秒嘀科技(http://www.miaodiyun.com/),注册一个账号2.注册好之后,点击用户中心->账户管理,就会进入如下界面(顺便提一下,新注册的用户,平台会免费赠送你10元,足够大家学习和使用了,所以不用担心需要充钱)你需要做的就是获取你自己的ACCOUNTSID和AUTHTOKEN3.点击用户中心->认证,进行企…

    2022年7月21日
    19
  • dpu芯片_三星放弃自研架构

    dpu芯片_三星放弃自研架构近日,专注于智能计算领域的DPU芯片和解决方案公司中科驭数发布了其下一代DPU芯片计划,将基于自研的KPU(KernelProcessingUnit)芯片架构,围绕网络协议处理、数据库和大数据处理加速、存储运算、安全加密运算等核心功能,推出新一代DPU芯片,赋能金融科技、数据中心、混合云及边缘计算等高带宽、低延迟、数据密集型的计算场景。DPU,是DataProcessingUnit的简称,是面向数据中心的专用处理器。据中科驭数创始人兼CEO鄢贵海介绍,”DPU是最新发展起来的专用处理器的一个大类

    2025年9月27日
    2
  • centos修改IP_项目废标能否随便换代理公司

    centos修改IP_项目废标能否随便换代理公司直接上代码:varsettings=newCefSettings();settings.CachePath="cache";settings.CefCommandLineArgs.Add("proxy-server",ProxyAddress);Cef.Initialize(settings);

    2022年9月19日
    4
  • live2d 添加对应mine值,mtn,moc文件404

    live2d 添加对应mine值,mtn,moc文件404

    2022年2月20日
    49
  • 线程运行超时处理类

    线程运行超时处理类

    2021年8月17日
    53

发表回复

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

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