如何将单个列值拆分为多个列值?

Sha*_*sra 22 sql t-sql sql-server string

我有一个问题是将单列值拆分为多个列值.

例如:

Name
------------
abcd efgh
ijk lmn opq
asd j. asdjja
asb (asdfas) asd
asd
Run Code Online (Sandbox Code Playgroud)

我需要这样的输出:

first_name             last_name
----------------------------------
abcd                     efgh
ijk                      opq
asd                      asdjja
asb                      asd
asd                      null
Run Code Online (Sandbox Code Playgroud)

中间名可以省略(不需要中间名)列已经创建,需要插入该Name列的数据.

Mar*_*ith 20

你的方法不会正确处理很多名字,但......

SELECT CASE
         WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1)
         ELSE name
       END,
       CASE
         WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1)
       END
FROM   YourTable 
Run Code Online (Sandbox Code Playgroud)

  • @IlyasMimouni - 这个问题标记为SQL Server. (2认同)

Ric*_*iwi 13

马丁的替代品

select LEFT(name, CHARINDEX(' ', name + ' ') -1),
       STUFF(name, 1, Len(Name) +1- CHARINDEX(' ',Reverse(name)), '')
from somenames
Run Code Online (Sandbox Code Playgroud)

样本表

create table somenames (Name varchar(100))
insert somenames select 'abcd efgh'
insert somenames select 'ijk lmn opq'
insert somenames select 'asd j. asdjja'
insert somenames select 'asb (asdfas) asd'
insert somenames select 'asd'
insert somenames select ''
insert somenames select null
Run Code Online (Sandbox Code Playgroud)