我有一列我想分成三列
Name
Jack,Jon Man
就像
first_name , middle_name , last_name
jack , Jon , Man
第一个名称后跟逗号,中间名后跟空格。
答案 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