SQL Server COALESCE()函数的利用[MSSQL防范]
本文“SQL Server COALESCE()函数的利用[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
COALESCE()函数可以承受一系列的值,假如列表中全部项都为空(null),那么只利用一个值.然后,它将返回第一个非空值.这一本领描写了创造性利用sql server 中COALESCE()函数的两种办法.
这里有一个简单的例子:有一个Persons数据表,它有三个字段FirstName、MiddleName和LastName.表中包含以下值:
John A. MacDonald
Franklin D. Roosevelt
Madonna
Cher
Mary Weilage
假如你想用一个字符串列出他们的全名,下面给出了若何利用COALESCE()函数完成此功效:
SELECT FirstName + '' '' +COALESCE(MiddleName,'''')+ '' '' +COALESCE(LastName,'''')
假如你不想每个查询都这样写,列表A显示了若何将它转换成一个函数.这样当你需求利用这个脚本的时刻(不管每个列的实际值是什么),可以直接调用该函数并传送三个字段参数.在下面的例子中,我传送给函数的参数是人名,但是你可以用字段名替换得到一样的后果:
SELECT dbo.WholeName(''James'',NULL,''Bond'')
UNION
SELECT dbo.WholeName(''Cher'',NULL,NULL)
UNION
SELECT dbo.WholeName(''John'',''F.'',''Kennedy'')
测试后果以下:
James Bond
Cher
John F. Kennedy
你大概会注意到我们的一个问题,在James Bond这个名字中有两个空格.通过改正@result这一行可以改正这个问题,以下所示:
SELECT @Result = LTRIM(@first + '' '' + COALESCE(@middle,'''') + '' '') + COALESCE(@last,'''')
下面是COALESCE()函数的另一个利用.在本例中,我们将显示一个支付给员工的工资单.问题是关于差别的员工工资尺度是差别的(比方,有些员工是按小时支付,按工作量每周发一次工资或是按责任支付).列表B中是成立一个样表的代码.下面是一些示例记录,每个是一种范例:
1 18.00 40 NULL NULL NULL NULL
2 NULL NULL 4.00 400 NULL NULL
3 NULL NULL NULL NULL 800.00 NULL
4 NULL NULL NULL NULL 500.00 600
用下面的代码在同一列中列出支付给员工的总额(不管它们的支付尺度):
SELECT
EmployeeID,
COALESCE(HourlyWage * HoursPerWeek,0)+
COALESCE(AmountPerPiece * PiecesThisWeek,0)+
COALESCE(WeeklySalary + CommissionThisWeek,0)AS Payment
FROM [Coalesce_Demo].[PayDay]
后果以下:
EmployeeID Payment
1 720.00
2 1600.00
3 800.00
4 1100.00
你大概需求在利用程序中多处利用这一计算办法,固然这种表示可以完成任务,但是看起来不是很美好.下面列出了若何利用一个单独的求和列来完成这项工作:
ALTERTABLE Coalesce_Demo.PayDay
ADD Payment AS
COALESCE(HourlyWage * HoursPerWeek,0)+
COALESCE(AmountPerPiece * PiecesThisWeek,0)+
COALESCE(WeeklySalary + CommissionThisWeek,0)
这样只要利用SELECT *便可以显示预先计算好的后果.
小结
本文介绍了利用COALESCE()函数一些特别场所和特别方法.就我的经验看来,COALESCE()函数最常呈目前一个具体的内容中,如一个查询或视图或存储历程中.
你可以将COALESCE()放在一个函数中来利用它,也可以通过将它放在一个单独的计算列中优化性能,并总能得到后果.
以上是“SQL Server COALESCE()函数的利用[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |