oracle 如何将一列拆分为多列

ycl3bljg  于 2022-12-26  发布在  Oracle
关注(0)|答案(3)|浏览(762)

我想把一列分成三列

Name
Jack,Jon Man

first_name  , middle_name , last_name
jack        , Jon         , Man

名字后面跟逗号,中间名后面跟空格。

brgchamk

brgchamk1#

使用REGEXP_SUBSTR()函数很容易做到这一点。了解更多。
这个查询识别第一次、第二次和第三次出现的字母字符。只要有一个分隔符,它是什么就没有关系。

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

jdgnovmf2#

样本数据:

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
unftdfkk

unftdfkk3#

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

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

相关问题