运行SQL Server 2008标题是这样说的,但是在我的选择语句中,我有此
COALESCE( ca.AttributeList.value('(/AttributeList/IRName)[1]','varchar(max)')
,ca2.AttributeList.value('(/AttributeList/IRName)[1]','varchar(max)'))
AS IR_Name
它返回lastName, FirstName
出口到CSV时,这将成为一个问题,因为它创建了两个单独的列,而不是。
我必须以某种方式弄清楚如何让字符串为 firstName lastName
,没有逗号,然后将一个名称放在首位。
SELECT PARSENAME(REPLACE('John , Doe', ',', '.'), 1) + ' ' + PARSENAME(REPLACE('John , Doe', ',', '.'), 2)
这将把"约翰,杜伊"转换为" doe john"。现在,您只需要用
替换'John,Doe。 COALESCE(ca.AttributeList.value('(/AttributeList/IRName)[1]','varchar(max)'),ca2.AttributeList.value('(/AttributeList/IRName)[1]','varchar(max)')) AS IR_Name
另一种方法是使用字符串函数:
select (case when IR_Name like '%,%'
then (ltrim(rtrim(substring(IR_NAME, charindex(',', IR_NAME)+1, 1000))) + ' ' +
ltrim(rtrim(left(IR_Name, charindex(',', IR_NAME) - 1)))
)
else IR_NAME
end) t
from (select COALESCE( ca.AttributeList.value('(/AttributeList/IRName)[1]','varchar(max)')
,ca2.AttributeList.value('(/AttributeList/IRName)[1]','varchar(max)'))
AS IR_Name
. . .
) t
修剪功能是删除额外的空间。
parsename
解决方案很聪明。但是,看起来很奇怪,因为parsename是为多部分命名惯例而设计的,最多四个部分按周期分开。