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)

 

 

你可能感兴趣的:(sql,server,table,null,insert)