COALESCE⽤法:返回其参数中第⼀个⾮空表达式(类似
ISNULL)
COALESCE⽤法:返回其参数中第⼀个⾮空表达式。
Transact-SQL语法约定
语法
COALESCE(expression[ ,...n ])
参数
expression
任何类型的表达式。
返回类型
返回数据类型优先级最⾼的expression的数据类型。
备注
如果所有参数均为NULL,则COALESCE返回NULL。
注意:
⾄少应有⼀个空值为NULL类型。
COALESCE(expression1,...n)与此CASE函数等效:
复制代码
CASE
WHEN (expression1IS NOT NULL)THEN expression1
...
WHEN (expressionN IS NOT NULL)THEN expressionN
ELSE NULL
END
尽管ISNULL等效于COALESCE,但它们的⾏为是不同的。包含具有⾮空参数的ISNULL的表达式将视为NOT NULL,⽽包含具有⾮空参数的COALESCE的表达式将视为NULL。在SQL Server中,若要对包含具有⾮空参数的COALESCE的表达式创建索引,可以使⽤PERSISTED列属性将计算列持久化,如以下语句所⽰:
复制代码
CREATE TABLE#CheckSumTest
(
ID int identity,
Num int DEFAULT (RAND()* 100 ),
RowCheckSum AS COALESCE(CHECKSUM(id,num), 0 )PERSISTED PRIMARY KEY
)
⽰例
在以下⽰例中,wages表中包括以下三列有关雇员的年薪的信息:hourly wage、salary和commission。但是,每个雇员只能接受⼀种付款⽅式。若要确定⽀付给所有雇员的⾦额总数,请使⽤COALESCE函数,它只接受在hourly_wage、salary和commission中到的⾮空值。
复制代码
SET NOCOUNT ON;
GO
USE master;
IF EXISTS(SELECT name FROM sys.tables
WHERE name='wages')
DROP TABLE wages;
GO
CREATE TABLE wages
(exists的用法
emp_id tinyint identity,
hourly_wage decimal NULL,
salary decimal NULL,
commission decimal NULL,
num_sales tinyint NULL
);
GO
INSERT wages VALUES(10.00,NULL,NULL,NULL); INSERT wages VALUES(20.00,NULL,NULL,NULL); INSERT wages VALUES(30.00,NULL,NULL,NULL); INSERT wages VALUES(40.00,NULL,NULL,NULL); INSERT wages VALUES(NULL, 10000.00,NULL,NULL); I
NSERT wages VALUES(NULL, 20000.00,NULL,NULL); INSERT wages VALUES(NULL, 30000.00,NULL,NULL); INSERT wages VALUES(NULL, 40000.00,NULL,NULL); INSERT wages VALUES(NULL,NULL, 15000, 3); INSERT wages VALUES(NULL,NULL, 25000, 2); INSERT wages VALUES(NULL,NULL, 20000, 6); INSERT wages VALUES(NULL,NULL, 14000, 4);
GO
SET NOCOUNT OFF;
GO
SELECT CAST(COALESCE(hourly_wage* 40 * 52, salary,
commission*num_sales)AS money)AS'Total Salary' FROM wages;
GO
下⾯是结果集:
复制代码
Total Salary
------------
20800.0000
41600.0000
62400.0000
83200.0000
10000.0000
20000.0000
30000.0000
40000.0000
45000.0000
50000.0000
120000.0000 56000.0000
(12 row(s)affected)

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