value函数什么意思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⽇”做为“重要⽇期”。实现此功能的如下:
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
转载于:wwwblogs/mark5/p/11527266.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。