APP下载

Transact—SQL中的对空值的处理函数COALESCE

2016-12-26桂云秋张磊周扬朱臣

科教导刊·电子版 2016年30期
关键词:应用

桂云秋+张磊+周扬+朱臣

摘 要 在数据库查询中,经常会遇到对空值的处理,如何处理不当可能会带来意想不到的结果。COALESCE函数能返回其参数中第一个非空表达式,在处理空值时常有非常好的效果。

关键词 Transact-SQL COALESCE函数 应用

在数据库查询中,经常会遇到对空值的处理,如何处理不当可能会带来意想不到的结果。COALESCE函数能返回其参数中第一个非空表达式,在处理空值时常有非常好的效果。

1语法及说明

COALESCE ( expression [ ,...n ] )

其中,expression 任何类型的表达式。返回数据类型优先级最高的 expression 的数据类型。如果所有参数均为 NULL,则 COALESCE 返回 NULL。但是,至少应有一个空值为 NULL 类型。

2应用实例

在以下示例中,wages 表中包括以下三列有关雇员的年薪的信息:hourly wage、salary 和 commission。但是,每个雇员只能接受一种付款方式。若要确定支付给所有雇员的金额总数,请使用 COALESCE 函数,它只接受在 hourly_wage、salary 和 commission 中找到的非空值。

SET NOCOUNT ON;

USE master;

IF EXISTS (SELECT name FROM sys.tables

WHERE name = wages)

DROP TABLE wages;

CREATE TABLE wages

emp_id tinyint identity,

hourly_wage decimal NULL,

salary decimal NULL,

commission decimal NULL,

num_sales tinyint NULL

);

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);

INSERT 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);

SET NOCOUNT OFF;

SELECT CAST(COALESCE(hourly_wage * 40 * 52,

salary,

commission * num_sales) AS money) AS Total Salary

FROM wages;

COALESCE(expression1,...n) 与此 CASE 函数等效:

CASE

WHEN (expression1 IS NOT NULL) THEN expression1

...

WHEN (expressionN IS NOT NULL) THEN expressionN

ELSE NULL

END

3应用说明

尽管 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

参考文献

[1] 杜佰林.网络数据库SQL Server 2000[M].清华出版社,2009,9.

[2] 何薇,舒后.网络数据库技术与应用[M].清华大学出版社,2014,10.

猜你喜欢

应用
多媒体技术在小学语文教学中的应用研究