【问题标题】:Split multiple values in a cell to multiple rows - Oracle SQL将单元格中的多个值拆分为多行 - 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

如何做到这一点?

【问题讨论】:

标签: sql oracle split


【解决方案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 不会将多行值拆分为单独的行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多