数据是" lastName,FirstName"。我需要把它写成" FirstName LastName"

时间:2012-12-20 18:08:49

标签: sql sql-server sql-server-2008 parsing coalesce

运行sql server 2008标题说明了,但在我的select语句中我有这个

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,没有逗号,并将firstName放在第一位。

2 个答案:

答案 0 :(得分: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

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