`
luhantu
  • 浏览: 204481 次
  • 性别: 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

分享到:
评论

相关推荐

    Oracle null的使用

    Sybase 中同样不存在长度为 0 的字符串,但是与 Oracle 不同的是,Sybase 并不将空串视作 NULL,而是视作与只包含一个空格的字符串等价。 Oracle 中 null 的长度是一些文章上说 null 长度为零(×),其实长度也为...

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

    在某些情况下,为了保持数据的整洁和避免后端处理null值时出现异常,我们需要在数据传输前过滤掉这些null值。本教程将详细介绍如何使用Spring MVC的拦截器来实现这一功能。 首先,了解拦截器(Interceptor)在...

    从mysql转换到oracle数据库.docx

    5. 空与空串:MySQL 中空与空串是两个不同的东西,而在 Oracle 中将 null 与空串做了同样的处理。 6. rs.isLast():当数据库为 MySQL 时,可以使用 `Connection.prepareStatement(str1)`,而在 Oracle 中必须使用 `...

    Oracle数据库字段类型详解

    `VARCHAR2` 还有一个特性,即把空串视为`NULL` 处理,而`VARCHAR` 仍然将其当作空串处理。因此,在大多数情况下,建议使用`VARCHAR2` 来提高兼容性和效率。 **Nchar/Nvarchar2** `NCHAR` 和`NVARCHAR2` 是Unicode...

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

    当我们讨论“由空格构成的串”和“空串”的区别时,我们是在区分两种特定的字符串类型。 首先,一个由空格构成的串,正如其名,是由一个或多个空格字符组成的字符串。在大多数编程语言中,空格被视为有效的字符,...

    编译原理之NULL集、first、follow集C语言实现

    在编译原理中,NULL集、first集和follow集是构造词法分析器(也称为扫描器或lexer)和语法分析器(也称为解析器或parser)的关键概念。这些集合帮助我们理解文法的结构,并在编译器设计中扮演着重要角色。以下是关于...

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

    Gson库可以自动处理Java对象与JSON格式之间的转换,但是默认情况下,所有的属性,无论其值是什么,都会被序列化进JSON字符串中,包括null值和空字符串。 然而,在大数据传输或存储到数据库的场景中,包含大量无意义...

    delphi分割字符串去空串.txt

    根据给定的文件信息,我们可以总结出以下关于 Delphi 分割字符串并去除空串的相关知识点。 ### Delphi 分割字符串并去除空串方法解析 #### 1. 函数定义及参数说明 函数名称:`SplitString` 所属类:`TForm1` ...

    PolarDB-O的Oracle平滑迁移方案.pdf

    PolarDB-O 支持 Oracle 数据库的多种语法,包括 PL/SQL、Package、VPD、系统视图和系统包、DBLINK、NULL 和空串兼容等,能够满足多种应用场景的需求。 函数兼容 PolarDB-O 支持 Oracle 数据库的多种函数,包括 ...

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

    正确地查询和理解NULL值与空字符串的区别,能帮助我们更准确地获取所需信息。在phpMyadmin中,可以方便地测试和运行这些SQL语句,以便于调试和优化查询。 总的来说,通过phpMyadmin的搜索功能或直接编写SQL语句,...

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

    在Python编程语言中,判断字符串是否为空或null是常见的操作,尤其在处理用户输入或从文件、数据库中读取数据时。以下将详细介绍几种在Python中检查字符串状态的方法。 1. **使用字符串长度判断** Python中最直接...

    Mybatis Integer类型参数值为0时得到为空的解决方法

    = null and version != '' or version ==0 ">AND a.version = #{version}这样可以避免因为 Integer 类型参数值为 0 而导致的错误查询结果。 巧用 "bug" 最后,如果想默认输入为 0 时查询所有(类似于上述问题示例)...

    第4章(串).pptx

    * 串中字符个数(n≥0),n=0时称为空串(Null String)。 * 串的子串是串中任意个连续的字符序列,子串的第一个字符在主串中的序号称为子串位置。 二、串操作的基本算法 * 串比较:int strcmp(char s1, char s2)...

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

    在处理JSON数据时,有时我们需要对其中的空串或值进行处理,比如移除空值、更改key/value等。本文将详细介绍如何在JSON字符串中进行这些操作。 首先,我们来看如何删除JSON对象中的value值。在JavaScript中,我们...

    堆的串操作2.cpp

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

    数据结构:第4章串A.ppt

    串的长度是指其中字符的数量,长度为零的串被称为空串(Null String),它与空白串(Blank String)不同,后者包含一个或多个空格字符。 在字符串中,子串是主串中任意个连续字符组成的序列。例如,字符串"BEIJING...

    数据结构中的关于串的问题

    如果n=0,则称为空串(null string),其长度为0。串中的字符可以通过它们在序列中的位置来引用,位置通常从1开始计数。例如,"BEIJING"这个串中,'B'的位置是1,'E'的位置是2,以此类推。 4.2 串的表示和实现 串的...

Global site tag (gtag.js) - Google Analytics