1

运行 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 时会成为一个问题,因为它会创建两个单独的列,而不是什么。

我必须以某种方式弄清楚如何让字符串 be firstName lastName,没有逗号,并将 firstName 放在第一位。

4

2 回答 2

3
    SELECT PARSENAME(REPLACE('John , Doe', ',', '.'), 1) + ' ' + PARSENAME(REPLACE('John , Doe', ',', '.'), 2)

这会将“John , Doe”切换为“Doe John”。现在,您只需将“John, Doe”替换为

   COALESCE(ca.AttributeList.value('(/AttributeList/IRName)[1]','varchar(max)'),ca2.AttributeList.value('(/AttributeList/IRName)[1]','varchar(max)')) AS IR_Name
于 2012-12-20T18:30:05.363 回答
0

另一种方法是使用字符串函数:

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 是为多部分命名约定而设计的,最多有四个部分用句点分隔。

于 2012-12-20T19:33:54.160 回答