PHP程序员站--PHP编程开发平台
 当前位置:主页 >> 数据库 >> MsSQL >> 

COALESCE逻辑取值函数的用法

COALESCE逻辑取值函数的用法

来源:PHP程序员站  作者:PHP程序员站  发布时间:2011-06-09
COALESCE (Transact-SQL) 返回其参数中第一个非空表达式。 Transact-SQL 语法约定 语法 COALESCE ( expression [ ,...n ] ) 参数 expression 任何类型的 表达式。 返回类型 返回数据类型优先级最高的 expression 的数据类型。如果所有表达式都不可为 Null,则结果的类

COALESCE (Transact-SQL)

返回其参数中第一个非空表达式。

Transact-SQL 语法约定

语法
COALESCE ( expression [ ,...n ] )   参数
expression
任何类型的 表达式。

返回类型
返回数据类型优先级最高的 expression 的数据类型。如果所有表达式都不可为 Null,则结果的类型也不可为 Null。

注释
如果所有参数均为 NULL,则 COALESCE 返回 NULL。

注意:
至少应有一个 Null 值为 NULL 类型。

 

COALESCE(expression1,...n) 的功能与以下 CASE 表达式相同:

CASE

WHEN (expression1 IS NOT NULL) THEN expression1

WHEN (expression2 IS NOT NULL) THEN expression2

...

ELSE expressionN

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
);  示例
简单示例
下面的示例演示 COALESCE 如何从第一个具有非 Null 值的列中选择数据。

USE AdventureWorks ;

GO

SELECT Name, Class, Color, ProductNumber,

COALESCE(Class, Color, ProductNumber) AS FirstNotNull

FROM Production.Product ;

GO

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

SET NOCOUNT ON;
GO
USE tempdb;
IF OBJECT_ID('dbo.wages') IS NOT NULL
DROP TABLE wages;
GO
CREATE TABLE dbo.wages
(
emp_id        tinyint   identity,
hourly_wage   decimal   NULL,
salary        decimal   NULL,
commission    decimal   NULL,
num_sales     tinyint   NULL
);
GO
INSERT dbo.wages (hourly_wage, salary, commission, num_sales)
VALUES
(10.00, NULL, NULL, NULL),
(20.00, NULL, NULL, NULL),
(30.00, NULL, NULL, NULL),
(40.00, NULL, NULL, NULL),
(NULL, 10000.00, NULL, NULL),
(NULL, 20000.00, NULL, NULL),
(NULL, 30000.00, NULL, NULL),
(NULL, 40000.00, NULL, NULL),
(NULL, NULL, 15000, 3),
(NULL, NULL, 25000, 2),
(NULL, NULL, 20000, 6),
(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 dbo.wages
ORDER BY 'Total Salary';
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)

请参阅

ISNULL (Transact-SQL)
CASE (Transact-SQL)


延伸阅读:
SQL2005 中COALESCE函数的用法
SQL中CONVERT转化函数, Concat , COALESCE的用法
Tags: COALESCE   逻辑   取值函数  
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号