加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql:函数:COALESCE()

发布时间:2022-11-16 17:08:55 所属栏目:MsSql教程 来源:转载
导读: COALESCE()函数
主流数据库系统都支持COALESCE()函数,这个函数主要用来进行空值处理,其参数格式如下:
COALESCE ( expression,value1,value2……,valuen)
COALESCE()函数的第一个参数exp

COALESCE()函数

主流数据库系统都支持COALESCE()函数,这个函数主要用来进行空值处理,其参数格式如下:

COALESCE ( expression,value1,value2……,valuen)

COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。

COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。

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

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

如果value2不为空值则返回value2;……以此类推,

如果所有的表达式都为空值,则返回NULL。

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

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

MYSQL、MSSQLServer、DB2:

SELECT FName,FBirthDay,FRegDay,?
COALESCE(FBirthDay,FRegDay,'2008-08-08') ?AS ImportDay ?
FROM T_Person?

Oracle:

SELECT FBirthDay,FRegDay, ?
COALESCE(FBirthDay,FRegDay,TO_DATE('2008-08-08', 'YYYY-MM-DD HH24:MI:SS')) ?
AS ImportDay ?
FROM T_Person?

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

FName ?FBirthDay ?FRegDay ?ImportDay?
Tom ?1981-03-22 00:00:00 ?1998-05-01 00:00:00 ?1981-03-22 00:00:00?
Jim ?1987-01-18 00:00:00 ?1999-08-21 00:00:00 ?1987-01-18 00:00:00?
Lily ?1987-11-08 00:00:00 ?2001-09-18 00:00:00 ?1987-11-08 00:00:00?
Kelly ?1982-07-12 00:00:00 ?2000-03-01 00:00:00 ?1982-07-12 00:00:00?
Sam ?1983-02-16 00:00:00 ?1998-05-01 00:00:00 ?1983-02-16 00:00:00?
Kerry ? ?1999-03-01 00:00:00 ?1999-03-01 00:00:00?
Smith ? ? ?2008-08-08?
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

原文参考:

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!