【问题标题】:SQL Seperate delimiter and create new row [duplicate]SQL分隔分隔符并创建新行[重复]
【发布时间】:2015-03-07 07:56:08
【问题描述】:

我有以下表格内容。

COLUMN_A  | COLUMN_B

a         | 123!234!345
b         | 809!123!678!456
c         | 678!789

有没有办法让 SQL 分隔分隔符“!”并生成一个新行,如下所示? column_B 中的分隔符个数是随机的

COLUMN_A  | COLUMN_B

a         | 123
a         | 234
a         | 345
b         | 809
b         | 123
b         | 678
b         | 456
c         | 678
c         | 789

【问题讨论】:

  • 您使用的是什么关系型数据库?您已标记 3。
  • MSSQL、mySQL 和 Oracle。我这里有各种系统。
  • 不同的数据库支持非常不同的 SQL 方言——至少,对于 Oracle、SQL Server 和 MySQL,您会得到三个非常不同的答案。这使得这个网站过于宽泛——你可以得到三个不同的答案,它们都是“正确的”。如果您将自己限制在其中一个数据库中,那么这个问题将更适合这个网站。
  • 好吧,既然 SQL 已经可用,我们可以有 oracle 解决方案吗?

标签: oracle


【解决方案1】:

好的,为 Oracle 找到了答案。 仅适用于 11g 和 12c

select COLUMN_A, subSTR(COLUMN_B, inSTR(COLUMN_B, '!', 1, lvl) + 1, inSTR(COLUMN_B, '!', 1, lvl + 1) - inSTR(COLUMN_B, '!', 1, lvl) - 1) name 
from
( select '!' || COLUMN_B || '!' as COLUMN_B, COLUMN_A from table ),
( select level as lvl from dual connect by level <= 100 )
where lvl <= length(COLUMN_B) - length(replace(COLUMN_B, '!')) - 1
order by COLUMN_A, COLUMN_B

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多