NUll在oracle与sqlserver中使用相同与区别
最近在使用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中使用相同与区别的更多相关文章
- CTE在Oracle和Sqlserver中使用的差异
CTE是一个很好用的工具,他可以帮助我们清晰代码结构,减少临时表使用,同时oracle和sqlserver都提供支持.但在oracle和sqlserver中使用CTE也存在一定区别. Oracle使用 ...
- Oracle RMAN备份中catalog和nocatalog区别
nocatalog方式:用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息,即RMAN的备份信息写在本地控制文件里面. cat ...
- 关于MySQL,Oracle和SQLServer的特点以及之间区别
关系型数据库:是指采用了关系模型来组织数据的数据库.简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织. 非关系型数据库:非关系型数据库严格上说不是 ...
- substr在oracle和mysql中的应用和区别
Oracle: 书写格式: (1)Select substr(字段名(string) , 起始位置(int) , 截取长度(int)) 示例: selectsubstr('123456',0,3)a ...
- 采用Hibernate框架的研发平台如何能够真正兼容Oracle和sqlServer数据库
都说Hibernate框架的使用可以很容易的让你的研发平台支持多种不同类型的数据库,但实践表明,这里的“容易”,是相对的. 想让研发平台支持多种数据库,并不是一件简单的事,也可以这么说:并不是只要使用 ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- Oracle与Sqlserver:Order by NULL值介绍
针对页面传参到in的子集中去进行查询操作的话,就会有in(xxx,null),这样就会导致查询的结果中其实直接过滤掉了null,根本就查不出来null的值.之前对于null的操作都是进行不同数据库的n ...
- Oracle&SQLServer中实现跨库查询
一.在SQLServer中连接另一个SQLServer库数据 在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器: EXEC master.dbo.sp_addlinked ...
- SQLSERVER中NULL位图的作用
SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...
随机推荐
- Coursera《machine learning》--(2)单变量线性回归(Linear Regression with One Variable)
本笔记为Coursera在线课程<Machine Learning>中的单变量线性回归章节的笔记. 2.1 模型表示 参考视频: 2 - 1 - Model Representation ...
- 玩转C++运算符重载
运算符重载语法:返回值类型 operator运算符(参数列表) { 代码逻辑... } C++中的运算符重载是通过函数来实现的,可以将重载的运算符看作是类成的一个成员函数,向普通函数一样调用.如重 ...
- eclipse 启动tomcat报Spring错误 Error creating bean with name 'serviceOrderBiz': Injection of autowired dependencies failed
启动tomcat报异常,提示Sring无法创建serviceOrderBiz(第一行红字),继续看是因为有一个自动注入的字段无法注入ModuleInterfaceBiz(第二行红字),检查servic ...
- 总结Web应用中基于浏览器的安全漏洞
1.浏览器缓存 每次打开一个网站,网页的内容会缓存到用户的机器中.如果这些内容在其他网页中需要重新加载,浏览器加载的是缓存,而不是再次下载内容.如果一些Web应用商店以及显示用户敏感信息(比 ...
- Codeforces 161D
树形DP: 要求找出树上距离为k的点的对数: 对于每个节点,经过这个节点的符合条件的的点有两种: 第一种:距离他为i的儿子和他爸爸中距离他爸爸为k-i-1:(不是符合的点对中的一个) 第二种:他儿子中 ...
- Android 模拟HTTP协议的编码问题 Android默认编码UTF-8
Android通过GET和POST方法请求服务器和浏览器请求的过程是不一样的. 浏览器请求服务器的时候会先将中文进行UTF-8编码,然后再发送到服务器端. Android编程下我们需要通过URLEnc ...
- java基础随笔-内部类
今天来复习下内部类的一些基础知识. 首先是内部类的分类: 1.成员内部类 2.静态内部类 3.匿名内部类 4.局部内部类 下面逐一来介绍下. 首先是成员内部类,就是将内部类作为一个成员变量来处理.具体 ...
- 通过 PowerShell 支持 Azure Traffic Manager 外部端点和权重轮询机制
Jonathan TulianiAzure网络 - DNS和 Traffic Manager高级项目经理 在北美 TechEd 大会上,我们宣布了 Azure Traffic Manager将支持 ...
- HDOJ(HDU) 2520 我是菜鸟,我怕谁(等差数列)
Problem Description lin2144是一只小菜鸟,都是笨鸟先飞,lin2144想来个菜鸟先飞,他从0点出发 一开始的飞行速度为1m/s,每过一个单位时间lin2144的飞行速度比上一 ...
- iOS屏蔽高频点击技巧
例如高频率点击一个按钮或者TableViewCell,会造成功能多次重复执行,在异步网络请求时候或者多线程时候,造成的问题尤其明显. 解决方法: 声明一个属性self.actionWorking ,标 ...