【问题标题】:SQL - First and last name from full nameSQL - 全名的名字和姓氏
【发布时间】:2016-07-19 20:02:26
【问题描述】:

我在 SQL 表中有一个字段,其中包含显示员工编号的用户全名,然后是全名 (20284 - JOAQUIM MIGUEL SAMPAIO PEREIRA)

我只想展示“JOAQUIM PEREIRA”。

现在我正在尝试使用以下代码:

SELECT left(NMSTRING, CHARINDEX(' ',NMSTRING,CHARINDEX(' ',NMSTRING,CHARINDEX(' ',NMSTRING)+1)+1)-1) +
substring(WFPROCATTRIB.NMSTRING, len(WFPROCATTRIB.NMSTRING)-CHARINDEX(' ', REVERSE(WFPROCATTRIB.NMSTRING))+1, len(WFPROCATTRIB.NMSTRING))
FROM WHATEVER

我得到的结果是:“20284 - JOAQUIM PEREIRA”

如何删除“20284 -”部分?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

这样试试,

DECLARE @sql VARCHAR(50) = '20284 - JOAQUIM MIGUEL SAMPAIO PEREIRA'

SELECT substring(@sql, charindex('-', @sql) + 2, charindex(' ', substring(@sql, charindex('-', @sql) + 2, len(@sql)))) + ' ' + substring(@sql, LEN(@sql) - CHARINDEX(' ', REVERSE(@sql)) + 2, LEN(@sql))

【讨论】:

  • 你好。这正是我所需要的。
  • 很高兴为您提供帮助。
【解决方案2】:

如果员工编号总是五个字符,您可以这样做:

 select substring(NMString, 9, len(NMString))

另一种方法是使用charindex():

select substring(NMString,
                 charindex(' - ', NMString) + 3,
                 len(NMString)
                )

【讨论】:

    【解决方案3】:

    你可以使用子字符串来得到想要的结果

    DECLARE @Name varchar(100) = '20284 - JOAQUIM PEREIRA'
    SELECT SUBSTRING(@Name, CHARINDEX('-', @Name) + 1, LEN(@Name))
    

    更多示例

    DECLARE @TestTable TABLE
    (
      EmployeeDetails varchar(100)
    
     )
    
     INSERT INTO @TestTable VALUES ('20284 - JOAQUIM PEREIRA'),
     ('123 - Name1') , ('12312344 - Some Other Name')
    
     SELECT SUBSTRING(EmployeeDetails, CHARINDEX('-', EmployeeDetails) + 1, LEN(EmployeeDetails)) FROM @TestTable
    

    DEMO - ON Stackexchange data explorer

    【讨论】:

      【解决方案4】:

      有点矫枉过正,但应该适合你:

      --Declare table with example
      DECLARE @WHATEVER TABLE (
          NMSTRING nvarchar(max)
      )
      
      INSERT INTO @WHATEVER VALUES
      (N'20284 - JOAQUIM MIGUEL SAMPAIO PEREIRA'),
      (N'20285 - JOAQUIM SAMPAIO PEREIRA'),
      (N'20286 - JOAQUIM PEREIRA')
      
      --Declare xml variable
      DECLARE @xml xml
      
      --Put data in xml variable
      SELECT @xml = (
          SELECT CAST('<s><n>' + REPLACE(NMSTRING,' ','</n><n>') + '</n></s>' as xml)
          FROM @WHATEVER
          FOR XML PATH('')
      )
      

      @xml 中的数据将如下所示:

      <s>
        <n>20284</n>
        <n>-</n>
        <n>JOAQUIM</n>
        <n>MIGUEL</n>
        <n>SAMPAIO</n>
        <n>PEREIRA</n>
      </s>
      <s>
        <n>20285</n>
        <n>-</n>
        <n>JOAQUIM</n>
        <n>SAMPAIO</n>
        <n>PEREIRA</n>
      </s>
      <s>
        <n>20286</n>
        <n>-</n>
        <n>JOAQUIM</n>
        <n>PEREIRA</n>
      </s>
      

      然后运行这个

      SELECT t.v.value('n[3]','nvarchar(max)') + ' ' +
              COALESCE(t.v.value('n[6]','nvarchar(max)'),t.v.value('n[5]','nvarchar(max)'),t.v.value('n[4]','nvarchar(max)'))
      FROM @xml.nodes('/s') as t(v)
      

      输出

      JOAQUIM PEREIRA
      JOAQUIM PEREIRA
      JOAQUIM PEREIRA
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-22
        • 2022-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多