COALESCE()函数
主流数据库系统都支持COALESCE()函数,这个函数主要用来进行空值处理,其参数格式如下: 
COALESCE ( expression,value1,value2……,valuen) 
COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。
COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。

如果expression不为空值则返回expression;否则判断value1是否是空值,

如果value1不为空值则返回value1;否则判断value2是否是空值,

如果value2不为空值则返回value2;……以此类推,
如果所有的表达式都为空值,则返回NULL。

我们将使用COALESCE()函数完成下面的功能,返回人员的“重要日期”:

如果出生日期不为空则将出生日期做为“重要日期”,如果出生日期为空则判断注册日期是否为空,如果注册日期不为空则将注册日期做为“重要日期”,如果注册日期也为空则将“2008年8月8日”做为“重要日期”。实现此功能的SQL语句如下: 
MYSQL、MSSQLServer、DB2: 

  1. SELECT FName,FBirthDay,FRegDay, 
  2. COALESCE(FBirthDay,FRegDay,'2008-08-08')  AS ImportDay  
  3. FROM T_Person 

Oracle: 

  1. SELECT FBirthDay,FRegDay,  
  2. COALESCE(FBirthDay,FRegDay,TO_DATE('2008-08-08', 'YYYY-MM-DD HH24:MI:SS'))  
  3. AS ImportDay  
  4. FROM T_Person 

执行完毕我们就能在输出结果中看到下面的执行结果:

  1. FName  FBirthDay  FRegDay  ImportDay 
  2. Tom  1981-03-22 00:00:00  1998-05-01 00:00:00  1981-03-22 00:00:00 
  3. Jim  1987-01-18 00:00:00  1999-08-21 00:00:00  1987-01-18 00:00:00 
  4. Lily  1987-11-08 00:00:00  2001-09-18 00:00:00  1987-11-08 00:00:00 
  5. Kelly  1982-07-12 00:00:00  2000-03-01 00:00:00  1982-07-12 00:00:00 
  6. Sam  1983-02-16 00:00:00  1998-05-01 00:00:00  1983-02-16 00:00:00 
  7. Kerry  <NULL>  1999-03-01 00:00:00  1999-03-01 00:00:00 
  8. Smith  <NULL>  <NULL>  2008-08-08 
  9. BillGates  1972-07-18 00:00:00  1995-06-19 00:00:00  1972-07-18 00:00:00 

这里边最关键的就是Kerry和Smith这两行,可以看到这里的计算逻辑是完全符合我们的
需求的。

COALESCE()函数可以用来完成几乎所有的空值处理,不过在很多数据库系统中都提供了它的简化版,这些简化版中只接受两个变量,其参数格式如下: 
MYSQL: 
  IFNULL(expression,value) 
MSSQLServer: 
  ISNULL(expression,value) 
Oracle: 
  NVL(expression,value)

这几个函数的功能和COALESCE(expression,value)是等价的。

比如SQL语句用于返回人员的“重要日期”,如果出生日期不为空则将出生日期做为“重要日期”,如果出生日期为空则返回注册日期的值: 
MYSQL: 
SELECT FBirthDay,FRegDay,  
IFNULL(FBirthDay,FRegDay)  AS ImportDay  
FROM T_Person 
MSSQLServer: 
SELECT FBirthDay,FRegDay,  
ISNULL(FBirthDay,FRegDay)  AS ImportDay  
FROM T_Person 
Oracle: 
SELECT FBirthDay,FRegDay,  
NVL(FBirthDay,FRegDay)  AS ImportDay  
FROM T_Person

sql语句中判断空值的函数的更多相关文章

  1. mysql中sql语句中常见的group_concat()函数意思以及用法,oracle中与其一样的功能函数是wmsys.wm_concat()

    1.group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一 ...

  2. sql语句中避免使用mysql函数,提升mysql处理能力。

    如下sql中不要用mysql内置函数now()等,这样第一可以提高sql执行效率,第二统一程序层处理sql中时间参数,避免因服务器时间差导致问题产生. 使用PDO预处理,第一可以提高sql效率,第二可 ...

  3. 关于SQL语句中SUM函数返回NULL的解决办法

    SUM 是SQL语句中的标准求和函数,如果没有符合条件的记录,那么SUM函数会返回NULL. 但多数情况下,我们希望如果没有符合条件记录的情况下,我们希望它返回0,而不是NULL,那么我们可以使用例如 ...

  4. 问题:PLS-00204: 函数或伪列 'EXISTS' 只能在 SQL 语句中使用;结果:PL/SQL中不能用exists函数?

    怎么写了一个语句带出这样的结果. 语句: if exists (select * from sysdatabases where name='omni') then 结果: ERROR 位于第 4 行 ...

  5. sql 语句中使用条件判断case then else end

    sql 语句中使用条件判断case then else end范例: SELECT les.[nLessonNo] FROM BS_Lesson AS les WHERE les.[sClassCod ...

  6. Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数

    Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc ...

  7. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

    聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...

  8. SQL语句中日期的计算方法大全

    sql语句中的日期处理一.日期處理函數1.日期增減函數 dateadd(datepart,number,dtae) datepart:是規定應向日期的哪一部分返回新值的參數.下列是sql server ...

  9. SQL语句中的单引号处理以及模糊查询

    为了防止程序SQL语句错误以及SQL注入,单引号必须经过处理.有2种办法: 1.使用参数,比如SELECT * FROM yourTable WHERE name = @name; 在C#中使用Sql ...

随机推荐

  1. 20180820-Java 抽象类

    Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...

  2. cookie字段属性解析

    一个域名下面可能存在着很多个cookie对象.如果我们用selenium的get_cookies方法,可以得到当前浏览器的多个cookie,比如: {'name': 'QCARJSESSIONID', ...

  3. JDBC连接sql server数据库的详细步骤和代码 转

    JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序(只做一次): 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.C ...

  4. loj#2838 「JOISC 2018 Day 3」比太郎的聚会

    分析 预处理每个点的前根号小的距离 对于每次询问删除点小于根号则已经处理好 否则直接暴力dp即可 代码 #include<bits/stdc++.h> using namespace st ...

  5. ruby file

    E:/AutoTHCN/lib/report/generate_report/web14/20190516/LoanTool.636936123857869205_190516_140514.xlsx ...

  6. gradle命令行打包不同环境的apk包

    为什么我搜这个? 因为 早上在开发那边我看到他控制不同环境就是在这个下拉框选择不同的环境的 搜索词: Gradle 入门--只此一篇 https://www.jianshu.com/p/001abe1 ...

  7. mvc中@RenderSection()研究 转载https://www.cnblogs.com/rrxc/p/4062827.html

    一.@RenderSection定义 HelperResult RenderSection(string name) 但是当如果使用了_Layout.cshtml做母版页的页没有实现Section的话 ...

  8. Redux生态系统

    生态系统 Redux 是一个体小精悍的库,但它相关的内容和 API 都是精挑细选的,足以衍生出丰富的工具集和可扩展的生态系统. 如果需要关于 Redux 所有内容的列表,推荐移步至 Awesome R ...

  9. 02 - Jmeter4.x正则表达式以及跨线程使用变量

    话不多说 直接开撸 上图可以看出,有两个请求,其中第二个请求返回了登录超时,结合第一个登录接口来看,这个是需要header请求内容的也就是 token:当然设置一个token又怎么可能难得倒我们,无非 ...

  10. PHP/HTML混写的四种方式

    [整理]PHP/HTML混写的四种方式   PHP作为一款后端语言,为了输出给浏览器让浏览器呈现出来,无可避免的要输出HTML代码,下文介绍下我用过的三种PHP/HTML混编方法 1.单/双引号包围法 ...