拆分firstname和lastname但仅限于第一个空格

时间:2014-06-13 06:32:48

标签: sql sql-server

我正在尝试仅在第一个空格中拆分MSSQL中的字符串 考虑到这里可以有两个全名的空格,我不知道该怎么做。

示例:

Henk de Vries

我想把它分成:

Firstname: Henk
Lastname: de Vries

4 个答案:

答案 0 :(得分:3)

尝试使用Patindex

create table #t(name varchar(20))
insert into #t values('Henk de Vries')

select substring(name,1,PATINDEX('% %',name)) as First_name,SUBSTRING(name,patindex('% %',name),LEN(name)) as Last_Name from #t

这是通过t-clausen.dk 在评论中解决的。

select left(name,charindex(' ',name+' ')) as First_Name,substring(name,charindex(' ',name+' '),len(name)) as Last_Name from #t

An demo to test with

Updated demo

答案 1 :(得分:1)

这是一个将这个答案与所选答案进行比较的例子,请注意,当只有一个名字时,所选答案会有错误(我知道大多数人都有名字,但这不是一个完美的世界):

SELECT 
  LEFT(name, charindex(char(32), name + char(32))) Firstname,
  STUFF(name, 1, charindex(char(32), name), '') LastName,
  -- included example from accepted answer
  substring(name,1,PATINDEX('% %',name)) as First_name,
  SUBSTRING(name,patindex('% %',name),LEN(name)) as Last_Name
FROM (values('Henk de Vries'), ('Thomas')) x(name)

结果

Firstname LastName       First_name Last_Name
Henk      de Vries       Henk       de Vries
Thomas                              Thoma

答案 2 :(得分:0)

使用CHARINDEX查找第一个空格,然后使用LEFTRIGHT来提取用户的名字和姓氏

left(username, charindex(' ', username)-1) firstname, 
right(username, (len(username)-charindex(' ', username))) lastname

答案 3 :(得分:0)

DECLARE @Name    VARCHAR(50) = 'Henk de Vries'

SELECT SUBSTRING(@Name, 1, CHARINDEX(' ', @Name) - 1) AS [First Name],
       SUBSTRING(@Name, CHARINDEX(' ', @Name) + 1, LEN(@Name)) AS [Last Name]