Oracle将一列分成多列

Oracle将一列分成多列

在Oracle中,我们可以使用listagg(Oracle 11g及以上)将多行合并成中的某一列合并成一列,现在我们的需求是将一列分割成多列。

先建立一张表,插入测试数据:

CREATE TABLE CELEBRITY(
             NAME VARCHAR2(100)
 );

INSERT INTO CELEBRITY VALUES (‘Stephen King‘);
INSERT INTO CELEBRITY VALUES (‘Tom Hanks‘);
INSERT INTO CELEBRITY VALUES (‘Christopher Nolan‘);

查询该表其结构如下:

NAME
Stephen King
Tom Hanks
Christopher Nolan

现在将表分割成两列:

SELECT
  REGEXP_SUBSTR(name,‘^[^ ]*‘)  first_name,
  REGEXP_SUBSTR(name, ‘([[:alpha:]]+)$‘)   middle_name
FROM CELEBRITY

其中我们使用到了REGEXP_SUBSTR函数,其使用正则进行匹配,将一列分成两列,其结果如下:

FIRST_NAME MIDDLE_NAME
Stephen King
Tom Hanks
Christopher Nolan


当然,我们可以使用INSTR函数来进行分割:

SELECT
    SUBSTR(NAME, 1, INSTR(NAME, ‘ ‘)-1) FIRST_NAME,
    SUBSTR(NAME, INSTR(NAME, ‘ ‘)+1) MIDDLE_NAME
FROM  CELEBRITY

或者我们这样:

SELECT
  SUBSTR(NAME, 1, SPACE_POS-1) FIRST_NAME,
  SUBSTR(NAME, SPACE_POS+1) MIDDLE_NAME
FROM (SELECT NAME,INSTR(NAME, ‘ ‘) SPACE_POS
FROM CELEBRITY)

以上方法均可以将一列分成两列。

时间: 2024-12-19 19:15:21

Oracle将一列分成多列的相关文章

怎样把excel一列分成多列

1,选定要分列的列. 2,点击“数据”-“分列”. 3,在选项栏中设置如图 4,选择分隔符 4,看,分开了吧! 怎样把excel一列分成多列,布布扣,bubuko.com

SQL查出的字段一列分成两列

CREATE TABLE #tb( lh VARCHAR(10)) INSERT INTO #tb SELECT '12-1-2202' union all SELECT '12-1-2301' union all SELECT '12-1-2302' union all SELECT '12-1-2401' union all SELECT '12-1-2402' union all SELECT '12-1-2501' union all SELECT '12-1-2502' union a

Oracle 11g新特性之--虚拟列(Virtual Column)

Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值. 定义一个虚拟列的语法: column_name [datatype] [GENERATED ALWAYS] AS [expression] [VIRTUAL] 1.虚拟列可以用在select,update,delete语句的where条件中,但是不能用

MySQL 添加列, 修改列, 删除列

ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 删除列:alter table 表名 drop column 列名; 修改列名MySQL: alter table bbb change nnnnn hh int; 修改列名SQLServer:exec sp_rename't_stude

mysql 加入列,改动列,删除列。

MySQL 加入列,改动列,删除列 ALTER TABLE:加入,改动,删除表的列,约束等表的定义. 查看列:desc 表名; 改动表名:alter table t_book rename to bbb; 加入列:alter table 表名 add column 列名 varchar(30); 删除列:alter table 表名 drop column 列名; 改动列名MySQL: alter table bbb change nnnnn hh int; 改动列名SQLServer:exec

mysql 加入?列,改动列,删除列。

MySQL 加入?列,改动列,删除列 ALTER TABLE:加入?,改动,删除表的列,约束等表的定义. 查看列:desc 表名; 改动表名:alter table t_book rename to bbb; 加入?列:alter table 表名 add column 列名 varchar(30); 删除列:alter table 表名 drop column 列名; 改动列名MySQL: alter table bbb change nnnnn hh int; 改动列名SQLServer:e

多列转1列 SqlServer 实现oracle10g的 wmsys.wm_concat()--for xml path('')

有这么一个表 create table tb(id int, value varchar(10)) insert into tb values(1, 'aa') insert into tb values(1, 'bb') insert into tb values(2, 'aaa') insert into tb values(2, 'bbb') insert into tb values(2, 'ccc') insert into tb values(3, 'ddd') insert int

MySQL 查看约束,添加约束,删除约束 添加列,修改列,删除列

ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 删除列:alter table 表名 drop column 列名; 修改列名MySQL: alter table bbb change nnnnn hh int; 修改列名SQLServer:exec sp_rename't_stude

MySQL 添加列,修改列,删除列

ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 删除列:alter table 表名 drop column 列名; 修改列名MySQL: alter table bbb change nnnnn hh int; 修改列名SQLServer:exec sp_rename't_stude