SQL-全名中的名字和姓氏

SQL-全名中的名字和姓氏,sql,sql-server,Sql,Sql Server,我在as SQL表中有一个字段,其中包含显示员工编号的用户全名,然后是全名(20284-JOAQUIM MIGUEL SAMPAIO PEREIRA) 我只想展示“JOAQUIM PEREIRA” 目前,我正在尝试使用以下代码: SELECT left(NMSTRING, CHARINDEX(' ',NMSTRING,CHARINDEX(' ',NMSTRING,CHARINDEX(' ',NMSTRING)+1)+1)-1) + substring(WFPROCATTRIB.NMSTRING,

我在as 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年-华金·佩雷拉”


如何删除“20284-”部分?

如果员工编号始终为五个字符,您只需执行以下操作:

 select substring(NMString, 9, len(NMString))
另一种方法是使用
charindex()


您可以使用子字符串来获得所需的结果

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

像这样试试

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))

有点过火,但应该对你有用:

--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('')
)
然后运行这个

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

您使用的是哪种数据库管理系统?我假设是SQL Server。我可以看到TSQL语法。考虑使用指南吗?你好。这一个正是我需要的。我很高兴能帮助你。
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