最近在使用Oracle进行开发,遇到很多与以前使用sqlserver的不同语法。今天遇到null在两种数据库上面操作上的差别,在此记录两种数据库上的差异。

  • null 与字符串相加

1、在oracle中,null与字符串相加,结果仍然为字符串。

        select null || '字符串'
from dual ;

查询结果:字符串。

2、在sqlserver 中,null与字符串相加为null值

        select null + '字符串'

查询结果:null。

  • null处理函数

1、在oracle中,对null进行处理和转换的函数比较丰富,主要有nvl(),nvl2(),nullif(), coalesce()四个函数。

a、nvl(M,N)N为null的情况下,取M的值,否则取N的值

           select nvl(null, 1) from dual;

查询结果为1

b、nvl2(N,A,B)N为null时,取A的值,否则取B的值

           select nvl2(null, 1, 2) from dual;

查询结果为2

c、nullif(M,N)如果 M 和 N 相等,返回 NULL,否则返回 M。

           select nullif(1, 1) from dual;

查询结果为null

           select nullif(1, 2) from dual;

查询结果为1

d、coalesce(A1,.....,AN)返回第一个不为NULL的值。

           select coalesce(null,1,null,2,null,3) from dual;

2、在Sqlserver2008 中只有IsNuLL()函数

IsNull(A,B) 当A为null时,返回B,否则返回A

           select IsNull(null,0)

查询结果为0

  • 字段判断是否为null

oracle和sqlserver 判断字段是否为null都是采用以下方式

       Select
From Table
Where Field Is Null
  • null与空字符串

1、在oracle中 ‘’空字符串被当作null处理,在判断''空字符串时,采用is Null进行判断。在oracle中执行

         with aa as(
select '' a
from dual union all select null a
from dual
)
select *
from aa
where a is null

以上查询可以查询到两条记录,而不是一条记录

2、在sqlserver中,''与null是两种不同类型的值,在sqlserver中

         with aa as(
select '' a union all select null a
)
select *
from aa
where a is null;

以上查询只可以查询到一条记录

  • null逻辑运算

1、在oracle中null与任何值进行逻辑运算都是null值,包括null值本身。以下查询结果都是空结果集

       select * from dual where null = '';
select * from dual where null <> '';
select * from dual where null = '-1';
select * from dual where null <> '-1';
select * from dual where null = null;
select * from dual where null <> null;

2、在sqlserver中null与任何值进行逻辑运算都是null值,包括null值本身,以下查询结果都是空结果集

       select *
from (
select 1
) data
where null = '';
select *
from from (
select 1
) data
where null <> ''; select *
from (
select 1
) data
where null = '-1'; select *
from (
select 1
) data
where null <> '-1'; select *
from (
select 1
) data
where null = null; select *
from (
select 1
) data
where null <> null;
  • null算数运算

在oracle和sqlserver中,null 与任何数值进行算数运算都是null值。

  • null作为参数传递给内置函数返回的结果

1、在oracle中,null作为参数传递给以下系统内置函数

a、返回的结果为null值的函数

       select length(null) from dual;

       select trim(null) from dual;

       select ltrim(null) from dual;
   
select rtrim(null) from dual;
   
select rtrim(null,' ') from dual;     select soundex(null) from dual;     select SubStr(null,1) from dual;     select InStr(null,1) from dual;     select replace(null,'a','b') from dual;

b、返回结果不为null的函数

       select concat('a', null) from dual;

       select concat(null, 'a') from dual;

       select count(null) from dual;

2、在sqlserver中,null作为参数传递给以下那只函数,返回的结果还是null值

       select len(null) ;

       select ltrim(null) ;

       select rtrim(null) ;

       select soundex(null) ;

       select charindex(null,null,1) ;

       select replace(null,'a','b') ;
  • null记录在结果集中排序顺序

1、在oracle中null的记录总是作为最大值排序在其他值的记录后面。

          with aa as(
select 1 a from dual union all select null a from dual union all select 2 a from dual
)
select *
from aa
order by a asc ;

查询结果null的那一条记录排在1和2的记录后面,可以尝试改为order by a desc,这时null的记录则排在第一条

2、在sqlserver中,null的记录总是作为最小值排在其他值的前面,这与oracle刚好相反。

         with aa as(
select 1 a union all select null a union all select 2 a
)
select *
from aa
order by a asc ;

查询结果null的那一条记录排在1和2的前面,可以尝试改为order by a desc,这时null的记录则[排在最后一条

  • null 与索引关系

无论是在oracle还是在sqlserver中,null都会导致索引失效,因此为了使索引生效,尽量避免出现对null的判断作为查询条件,诸如is null , is not null等。

NUll在oracle与sqlserver中使用相同与区别的更多相关文章

  1. CTE在Oracle和Sqlserver中使用的差异

    CTE是一个很好用的工具,他可以帮助我们清晰代码结构,减少临时表使用,同时oracle和sqlserver都提供支持.但在oracle和sqlserver中使用CTE也存在一定区别. Oracle使用 ...

  2. Oracle RMAN备份中catalog和nocatalog区别

    nocatalog方式:用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息,即RMAN的备份信息写在本地控制文件里面. cat ...

  3. 关于MySQL,Oracle和SQLServer的特点以及之间区别

    关系型数据库:是指采用了关系模型来组织数据的数据库.简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织. 非关系型数据库:非关系型数据库严格上说不是 ...

  4. substr在oracle和mysql中的应用和区别

    Oracle: 书写格式: (1)Select  substr(字段名(string) , 起始位置(int) , 截取长度(int)) 示例: selectsubstr('123456',0,3)a ...

  5. 采用Hibernate框架的研发平台如何能够真正兼容Oracle和sqlServer数据库

    都说Hibernate框架的使用可以很容易的让你的研发平台支持多种不同类型的数据库,但实践表明,这里的“容易”,是相对的. 想让研发平台支持多种数据库,并不是一件简单的事,也可以这么说:并不是只要使用 ...

  6. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  7. Oracle与Sqlserver:Order by NULL值介绍

    针对页面传参到in的子集中去进行查询操作的话,就会有in(xxx,null),这样就会导致查询的结果中其实直接过滤掉了null,根本就查不出来null的值.之前对于null的操作都是进行不同数据库的n ...

  8. Oracle&SQLServer中实现跨库查询

    一.在SQLServer中连接另一个SQLServer库数据 在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器: EXEC master.dbo.sp_addlinked ...

  9. SQLSERVER中NULL位图的作用

    SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...

随机推荐

  1. Hive的Metastore contains multiple versions

    hive 客户端报错:Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeExcepti ...

  2. javascript日用代码集合(一)

    获取url参数 function get_url_param(name){ var reg = new RegExp("(^|&)" + name + "=([^ ...

  3. shuffle ----- mr 董西城

    http://dongxicheng.org/framework-on-yarn/apache-spark-shuffle-details/

  4. 【HDU4859】 海岸线(网络流-最小割)

    Problem Description 欢迎来到珠海! 由于土地资源越来越紧张,使得许多海滨城市都只能依靠填海来扩展市区以求发展.作为Z市的决策人,在仔细观察了Z市地图之后,你准备通过填充某些海域来扩 ...

  5. [jobdu]调整数组顺序使奇数位于偶数前面

    这道题的代码没啥好说的,用了O(n)的空间就是水题了.但可以讲一下思考过程.一开始是想O(1)的空间的,然后想从左往右双指针扫,然后根据出现顺序交换遇到的偶数和奇数.但遇到一个问题:1, 2, 3, ...

  6. Windows Azure云服务价格调整通知

     好消息!由世纪互联运营的 Windows Azure推出优惠啦.我们采纳了多渠道客户的意见和建议,为了更好地服务大家,将降低多种云服务的价格,其中包括我们最受欢迎的服务 -虚拟机和 Block ...

  7. unicode随笔小计

    科普字符集: ascii:一个字节,占8位,(0000 0000 - 1111 1111) 如果只是英语那就没什么问题. 后来,不同的语言有了编码诞生.为了统一,出现一个大集合.便有了. unicod ...

  8. 51Testing招聘软件测试课程研发人员

    最近有些两三年测试工作经验的小伙伴对自己的下一个工作有些迷茫,感觉很难有技术的突破,毕竟公司不是学校,不会允许员工海阔天空的去尝试各种新的技术.现在我就送给这些好学上进的小伙伴一个礼物,51Testi ...

  9. vijosP1067Warcraft III 守望者的烦恼

    vijosP1067Warcraft III 守望者的烦恼 链接:https://vijos.org/p/1067 [思路] 矩阵乘法. 可以得出递推式:      f[i]=sum{ f[n-1], ...

  10. [原]ubuntu下制作openstack-havana源

    ubuntu下可以用apt-mirror下载openstack的源: 1.安装apt-mirror: apt-get install apt-mirror 2.配置/etc/apt/mirror.li ...