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)
上一篇 2021年9月12日 下午7:00
下一篇 2021年9月12日 下午8:00


相关推荐

  • python pymssql_python pymssql

    python pymssql_python pymssql前言最近在学习python,发现好像没有对pymssql的详细说明,于是乎把官方文档学习一遍,重要部分做个归档,方便自己以后查阅。pymssql是python用来连接MicrosoftSQLServer的一个工具库(package)。其包含两个模块:pymssql:遵从DB-API_mssql:性能更佳、更易于使用从版本2.1.x起,整个库的实现基于FreeTDSpymssql的架构如下:在W…

    2025年7月27日
    5
  • Java7 新特性 —— java.nio.file 文件操作

    Java7 新特性 —— java.nio.file 文件操作

    2020年11月19日
    151
  • pycharm2021.7激活码(JetBrains全家桶)

    (pycharm2021.7激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~M…

    2022年3月21日
    65
  • 走进webpack(2)–第三方框架(类库)的引入及抽离

    正文之前,由于这是一个系列的文章,可能第一次看到的看官老爷们会觉得突兀,如果你是webpack新手,我建议你先从前几篇文章看起,如果你对webpack有一些了解,也希望可以在github上下载代码,对

    2022年3月25日
    42
  • plsql developer配置数据库连接_plsql使用教程

    plsql developer配置数据库连接_plsql使用教程一、概念PL/SQLDeveloper是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了OracleServer,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQLDeveloper侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要优势。Oracle数据库并不提供图形界面的开发…

    2026年4月13日
    4
  • ABAP开发语言「建议收藏」

    ABAP开发语言「建议收藏」2.第二部分ABAP开发语言2.1.ABAP基础2.1.1.语言概述2.1.1.1.程序结构ABAP程序源码结构包括数据定义和处理块两部分;处理块又分为事件块,对话模块,过程。过程中可以定义自己的局部变量。事件块,对话模块,只能使用全局数据定义。2.1.1.2.程序类型可直接运行的应用程序(可分配事务代码)可执行程序Executableprogram,类型代码…

    2025年6月21日
    3

发表回复

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

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