`
luhantu
  • 浏览: 199713 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle 空串和NULL

阅读更多

在Oracle中有个关键字叫NULL,它表示某个值是未知的、是不确定的。既然是未知的,就有无数种的可能性。因此,NULL并不是一个确定的值。

例1

set serverout on
declare 
v_b1 boolean:=null; --布尔值可以赋值null.当然它另外两种值只能是true,false了
v_a int := null;  
v_b int := null;      --整数可以给它赋值null
v_s  varchar2(20):= null ; --字符也可以赋值null
begin
if(v_a= v_b) then          --v_a 和v_b都是null但此处判断的结果是它们并不相等.改成v_a =null结果仍然是一样
dbms_output.put_line('v_a equal v_b');
else
dbms_output.put_line('v_a not equal v_b');--输出这个结果
end if;
if(v_b1) then          --把v_b1改成not v_b1结果都一样.也就是v_b1和把它取反都不会是true
dbms_output.put_line('v_b1 equal true');
else
dbms_output.put_line('v_b1 is not true');--输出这个结果
end if;

if(true or v_b1) then          --输出v_b1 equal true
dbms_output.put_line('v_b1 equal true');
else
dbms_output.put_line('v_b1 is not true'); -- 如果把前面的判断条件改成true and v_b1 则输入这条语句
end if;
end;

 例2:

create table test (ename char(1),constraint ck_test check(ename in ('a',null)));

 --上面的语句创建一个表,只有一列ename,给此列添加约束条件,它的值只能在列表('a',null)中.但实际上我们可以插入任何字符.这时貌似null可以代表所有的字符了.去掉它只能插入'a'

eate table test1 (ename char(1),constraint ck_test check(ename not in ('a',null)));

 --按我们猜想如果null能代表所有字符了那它取反就是不能输入任何字符.但实际上不是.此处它貌似没起任何作用.去掉它和不去掉效果一样.都可以插入除'a'外的任何字符

 

 

1.怎么理解null的这些用法

既然null是个不确定的类型,那么:

如例1中两个整数值v_a,v_b都是null.要让他们相等得就类似于让两个不确定类型,不确定数值的两个变量去比较,所以不可能相等。

而true or v_b1之所以为真,是因为or前面的为真的话,不去对后面的v_b1做判断了.

而v_b1和not v_b1都为假则可以认为v_b1的值不确定,所以最终结果只能为false.

这样来理解了null就不难明白为什么我们在一个表中插入一个null值.但我们不能通过判断条件=null来查询.不过oracle提供了关键字is来判断一个值是否是null.

例2中第二种情况我们也可以理解为既然null是不确定的,那么其实in或者not in都无所谓,都可以输入任何字符。

null 与任何值做逻辑运算得结果都为 false,包括和null本身

null 和任何数值进行数学运算,结果都为 null

null和字符串做连接等操作时,会作为空串使用,可以使用 || 将空字符串或 null 和字符串连接,或者concat('a', null)。

2.null和空字符串

oracle 将空字符串即''当成null.

所以如果你插入一条记录为空,oracle默认会转化为null值。

3.null和空字符串的判断

null 与任何值做逻辑运算得结果都为 false,所以要判断NULL就的用 is null 关键字来判断。

4.null和空字符串的转化

NVL( string1, replace_with) 

功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值。 

引申一下,此NVL的作用与SQLserver 中的 ISNULL( string1, replace_with) 一样。 

注意事项:string1和replace_with必须为同一数据类型,除非显示的使用TO_CHAR函数。 

4.使用null的注意事项

在用avg,max,min等oracle内置函数时会把为NULL的列忽略掉。

 

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

分享到:
评论

相关推荐

    spring mvc拦截器过滤json中的null值

    spring mvc拦截器,过滤json数据中的null值,将null变成空字符串,内含截图,及jar包

    由空格构成的串与空串是不同的

    由空格构成的串与空串是不同的 由空格构成的串与空串是不同的

    delphi分割字符串去空串.txt

    delphi分割字符串去空串

    java json不生成null或者空字符串属性(详解)

    下面小编就为大家带来一篇java json不生成null或者空字符串属性(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Python判断字符串是否为空和null方法实例

    判断python中的一个字符串是否为... print '字符串TEST1不是空串,TEST1:' + test1 2、isspace判断是否字符串全部是空格 Python isspace() 方法检测字符串是否只由空格组成。 #!/user/local/python/bin/python # codin

    django模型类中,null=True,blank=True用法说明

    1.模型类中设置:null=True,表示数据库创建时该字段可不填,用NULL填充. MySQL: Null这一列,如果值为YES表示:创建一条新记录时,该字段可不填,数据库会用默认值NULL填充.django模型类中声明null=True即可. desc = ...

    JSON字符串操作移除空串更改key/value的介绍|angluo-javascript-249028.pdf

    今天小编就为大家分享一篇关于JSON字符串操作移除空串更改key/value的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    堆的串操作2.cpp

    n=0时的串称为空串(Null String),它的长度为0。 (2)子串:串中任意个连续的字符组成的子序列称为该串的子串。 (3)主串:包含子串的串相应地称为主串。 (4)子串在主串中的位置:通常将字符在串中的序号...

    数据结构 第四章 串和数组 ppt

    0 个字符的串称为 空串( null string ); 由一个或多个空格组成的串称为空格串 串中任意个连续字符组成的子序列称为该串的 子串; 包含子串的串相应地称为 主串; 字符在序列中的序号为该 字符在串中的位置。 的知识...

    如何用phpMyadmin查询某表中的某字段为空的数据.pdf

    精品资源 欢迎下载

    Objective-C处理空字符串和页面传值及自定义拷贝

    在ios应用中,如果从网络请求数据,返回json或者是xml格式的数据时,经常会遇到空串,一般接口是用java等语言写的,如果是安卓,因为源语言都是java,只需判断是否等于null即可,但是在ios中会出现各种各项的形式,...

    PHP中类型转换 ,常量,系统常量,魔术常量的详解

    1.自动类型转换; 在运算和判断时,会进行自动类型转换; 1)其他类型转为bool,判断时转换; 1)整型转布尔型:0转false,非0转为true; 2) 空字符串和‘0'(“0”)转为false,其他... 1) null转换为空串(空串不显示)

    C# 判断字符串为空的几种办法

    1. 三种常用的字符串判空串方法:Length法:bool isEmpty = (str.Length == 0);Empty法:bool isEmpty = (str == String.Empty);General法:bool isEmpty = (str == “”);2. 深入内部机制:要探讨这三种方法的内部...

    关于矛盾串的空原点

    我们证明,给定特定的量化方案和特定的量规,空串与经典的和量子力学的双键串都重合。 我们还显示了空字符串和矛盾字符串的旋转版本也是如此。 通过这些结果,我们可以弄清歧义串,空串,常用串和Hohm-Siegel-...

    sybasease系统管理指南

    资源名称:sybase ase 系统管理指南   资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    手工构造预测语法分析程序

    已知文法G[S]: S->AT A->BU T->+AT|$ U->*BU|$ B->(S)|m 其中,$表示空串。对该文法构造预测分析表,并手工构造预测分析程序,对输入串m+m*m#进行语法分析,并根据栈的变化状态输出分析过程。

    js代码-将数组中的0替换为空

    js代码-将数组中的0替换为空

    复旦大学C语言程序设计解答——链表部分4

    //第7题:有序链表合并。输入:两个有序正整数链表 //(保证正整数从小到大输入,但可能有重复数字,输入为0表示终止)。...//这道题要考虑输入为空串和输入的数串有相同数字的情况,不用检验输入的合理性。

    时间与字符串工具类

    功 能:返回一个字符串去掉右边空格后的值,如果为null则返回空串 功 能:判断一个字符串是否超出给定长度

    js中!和!!的区别与用法

    可将变量转换成boolean类型,null、undefined和空字符串取反都为false,其余都为true。 !null=true !undefined=true !''=true !100=false !'abc'=false 2、!!常常用来做类型判断,在第一步!(变量)之后再做逻辑...

Global site tag (gtag.js) - Google Analytics