【问题标题】:Data is "lastName, FirstName". I need to write it as "FirstName LastName"数据是“姓,名”。我需要将其写为“FirstName LastName”
【发布时间】:2012-12-08 07:36:38
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:
        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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 2018-11-14
        相关资源
        最近更新 更多