COALESCE用法:返回其参数中第一个非空表达式(类似ISNULL)

COALESCE用法返回其参数中第一个非空表达式

 

 Transact-SQL 语法约定

 

语法

 

COALESCE ( expression [ ,...n ] )

 

 

参数

expression

任何类型的表达式

 

返回类型

返回数据类型优先级最高的 expression 的数据类型

 

备注

如果所有参数均为 NULL COALESCE 返回 NULL

 

注意

至少应有一个空值为 NULL 类型

 

 

 

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

 

 复制代码

CASE

   WHEN (expression1 IS 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 wagesalary commission但是每个雇员只能接受一种付款方式若要确定支付给所有雇员的金额总数请使用 COALESCE 函数它只接受在 hourly_wagesalary commission 中找到的非空值

 

 复制代码

SET NOCOUNT ON;

GO

USE master;

IF EXISTS (SELECT name FROM sys.tables

      WHERE name = 'wages')

   DROP TABLE wages;

GO

CREATE TABLE wages

(

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

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

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)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值