sql语句中判断空值的函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sql语句中判断空值的函数
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。