将单元格中的多个值拆分为多行 - Oracle SQL
Posted
技术标签:
【中文标题】将单元格中的多个值拆分为多行 - Oracle SQL【英文标题】:Split multiple values in a cell to multiple rows - Oracle SQL 【发布时间】:2019-03-08 09:53:54 【问题描述】:我有一张桌子:
表1
values
------------
x=new letter
------------
a=old letter
ba=older letter
xq=newer letter
------------
xf=new apple
xt=new orange
x3=new fruit
xtt=new seed
我必须将每个单元格中的值分成多行。
以下是输出:
表2
code description
x new letter
a old letter
ba older letter
xq newer letter
xf new apple
xt new orange
x3 new fruit
xtt new seed
如何做到这一点?
【问题讨论】:
看这个链接:***.com/questions/28677070/… 提示:使用regexp_substr
【参考方案1】:
我会使用regexp_replace()
或regexp_substr()
:
select regexp_substr(str, '^[^=]+') as code,
regexp_substr(str, '[^=]+$') as value
Here 是一个 dbfiddle。
请注意,这不会使用values
作为列名。这对于列名来说是一个非常糟糕的选择,因为它是一个 SQL 关键字。
【讨论】:
它还会将单个单元格中的多个值分隔为多行吗? 第二行存在多行值。 a=旧字母 ba=旧字母 xq=新字母在 1 个单元格中,换行【参考方案2】:尝试如下
SELECT NVL(SUBSTR('a=old letter', 0, INSTR('a=old letter', '=')-1), 'a=old letter')
AS col1, NVL(SUBSTR('a=old letter', INSTR('a=old letter', '=')+1), 'a=old letter')
FROM DUAL
所以在你的情况下
SELECT NVL(SUBSTR(values, 0, INSTR(values, '=')-1), values)
AS col1, NVL(SUBSTR(values, INSTR(values, '=')+1), values)
FROM table1
【讨论】:
第二个单元格包含多行值 - a=old letter ba=older letter xq=newer letter,上面的 sql 不会将多行值拆分为单独的行。以上是关于将单元格中的多个值拆分为多行 - Oracle SQL的主要内容,如果未能解决你的问题,请参考以下文章