使用 Oracle SQL 将可变长度分隔字符串拆分为列

Posted

技术标签:

【中文标题】使用 Oracle SQL 将可变长度分隔字符串拆分为列【英文标题】:Splitting a variable length delimited string into columns using Oracle SQL 【发布时间】:2014-04-04 12:20:14 【问题描述】:

我正在处理一个要求,我需要将逗号分隔的字符串拆分为不同的列。

这个列表是可变长度的,即它可以是

               a,b,c,d
                 or
               a,b,c,d,e

等等。即分隔符的数量,因此列的数量不固定。

有没有办法使用 SQL 查询来实现它?

我使用的是 Oracle 11gR2 企业版

谢谢

维沙德

【问题讨论】:

主要要求是使用普通 SQL 而不是 PL/SQL? 不幸的是,是的。 :-( 如果结果集包含大量固定字段,则这是一个有效的解决方案,例如150,仅部分填充了第一列中的数据? 嗯。是的,它可能被认为是一个有效的解决方案。但是,我不知道逗号分隔列表中可以存在的最大项目数。当前最大值约为 178。 【参考方案1】:

这取决于你在哪里工作。

在一个表中,一个 VARCHAR2 最多可以包含 4000 个字符。在 Oracle 12c 中,它可以是 32K - 但必须由 DBA 配置。

在 PL/SQL 内部,限制也高达 32K

【讨论】:

字符串长度将小于 4000 个字符。

以上是关于使用 Oracle SQL 将可变长度分隔字符串拆分为列的主要内容,如果未能解决你的问题,请参考以下文章

sql 表值函数-将一个传入的字符串用2中分隔符拆分成临时表

oracle中,用啥数据类型表示货币的数据类型

ORACLE中都有哪些数据类型

Oracle SQL TO_CHAR 可变长度

数据库中字符串长度,设置长短大小会不会影响性能

sql server里如何将一组用逗号分隔的字符串分解并插入到另一张表中,比如:11873,27827, 也可能是好多