[英]SQL - First and last name from full name
I have a field, in as SQL table, with the fullname of the users that shows the employee number and then the full name (20284 - JOAQUIM MIGUEL SAMPAIO PEREIRA) 我有一个字段,在SQL表中,用户的全名显示员工编号,然后是全名(20284 - JOAQUIM MIGUEL SAMPAIO PEREIRA)
I only want to show "JOAQUIM PEREIRA". 我只想表现出“JOAQUIM PEREIRA”。
Right now am trying to use the following code: 现在我正在尝试使用以下代码:
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
And the result i am getting is: "20284 - JOAQUIM PEREIRA" 我得到的结果是:“20284 - JOAQUIM PEREIRA”
How can i remove the "20284 - " part? 我如何删除“20284 - ”部分?
If the employee number is always five characters, you could simply do: 如果员工编号总是五个字符,您可以简单地执行以下操作:
select substring(NMString, 9, len(NMString))
Another method would be to use charindex()
: 另一种方法是使用
charindex()
:
select substring(NMString,
charindex(' - ', NMString) + 3,
len(NMString)
)
You can use substring to get the desired result 您可以使用子字符串来获得所需的结果
DECLARE @Name varchar(100) = '20284 - JOAQUIM PEREIRA'
SELECT SUBSTRING(@Name, CHARINDEX('-', @Name) + 1, LEN(@Name))
More examples : 更多例子 :
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 DEMO - 在Stackexchange数据资源管理器上
Try like this, 试试这样,
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))
A little bit overkill, but should work for you: 有点矫枉过正,但应该适合你:
--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('')
)
The data in @xml
will look like this: @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>
Then run this 然后运行它
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)
Output 产量
JOAQUIM PEREIRA
JOAQUIM PEREIRA
JOAQUIM PEREIRA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.