oracle按逗号分割一列的值转成多行

Oracle 数据库可以使用内置函数 "regexp_substr" 和 "connect by level" 来实现将一列用逗号分割的值转换为多行。

具体语法如下:

SELECT regexp_substr(column_name, '[^,]+', 1, level) as split_value
FROM table_name
CONNECT BY level <= regexp_count(column_name, ',') + 1
column_name 是要转换的列的名称
table_name 是表的名称

这条语句会对指定的列进行分割,并将每一个分割出来的值作为一行返回,其中level参数用来限制循环的次数,这里是通过计算逗号的数量来限制循环次数。

如果您想要将结果集转成其他表中可以使用 insert into 命令

insert into new_table (column_name)
SELECT regexp_substr(column_name, '[^,]+', 1, level) as split_value
FROM table_name
CONNECT BY level <= regexp_count(column_name, ',') + 1

注意:在执行这条语句之前,您需要确保指定的列中没有空值。

  •