如何将一列分成几列

时间:2015-12-23 06:32:50

标签: sql oracle

我有一列我想分成三列

Name
Jack,Jon Man

就像

first_name  , middle_name , last_name
jack        , Jon         , Man

第一个名称后跟逗号,中间名后跟空格。

3 个答案:

答案 0 :(得分:4)

使用REGEXP_SUBSTR()功能很容易做到这一点。 Find out more

此查询标识第一,第二和第三次出现的字母字符。如果有一个分隔符,那它无关紧要。

SQL> select col1 
  2         , regexp_substr(col1, '[[:alpha:]]+') first_name 
  3         , regexp_substr(col1, '[[:alpha:]]+', 1, 2) middle_name 
  4         , regexp_substr(col1, '[[:alpha:]]+', 1, 3) last_name 
  5  from t34;

COL1                           FIRST_NAME MIDDLE_NAM LAST_NAME
------------------------------ ---------- ---------- ----------
Jack,Jon Man                   Jack       Jon        Man

SQL> 

答案 1 :(得分:0)

示例数据:

name
---------
Jack,Jon Man
Dave,Mike Doe
Chris,Brad Duke

查询:

select substr(name, 0, instr(name, ',')-1) as first_name,
    substr(name, instr(name,',',1,1)+1, instr(name, ',')-1) as middle_name,
    substr(name, instr(name,' ',1,1), instr(name, ' ')+10) as last_name
from sample_data

输出:

first_name    middle_name    last_name
---------------------------------------
Jack          Jon            Man
Dave          Mike           Doe
Chris         Brad           Duke

古德勒克和圣诞快乐!

答案 2 :(得分:-2)

如果我们只是选择数据,可以使用简单的子字符串函数来完成。 例如

 create table #Random
(
Name Varchar(50)
)
insert into #random values ('Jack,Jon Man')

select substring(Name,1,4)'First_Name', 
  substring(Name,6,3)'Middle_Name',
  substring(Name,10,3)'Last_Name'
from #Random