在Oracle中将char拆分为多行

Posted

技术标签:

【中文标题】在Oracle中将char拆分为多行【英文标题】:Splitting char to multiple rows in Oracle 【发布时间】:2016-09-28 01:54:39 【问题描述】:

表格如下:


YEAR  | MONTH |            HOLIDAY            |
2015  |  10   | #      #      #    ###        |
2015  |  11   | #      #      #      #      # |

我想创建以下内容:


YEAR  | MONTH | DATE |  VALUE  |
2015  |   10  |  01  |    #    |
2015  |   10  |  02  |         |
2015  |   10  |  03  |         |
2015  |   10  |  04  |    #    |

              UNTIL
2016  |   11  |  30  |    #    |

我已经看到了一些关于堆栈的解决方案,但它无法正常工作 任何帮助将不胜感激

【问题讨论】:

这看起来您想使用UNPIVOT,但无法获得准确的答案,因为您将实际数据替换为# 【参考方案1】:

嗯,我不知道你为什么要去 11 月 31 日,这个不存在的日期。但是,这里有一个想法:

with n as (
      select level as n
      from dual
      connect by level <= 31
     )
select t.year, t.month, n.n as day,
       substr(t.holidays, n.n, 1) as holiday
from t join
     n
     on n.n <= length(t.holiday);

【讨论】:

对不起,这是我的错,直到11月30日实际上每个月的假期列的长度=当月的长度 @user3863074 。 . .我想通了,这就是我在回答中使用它的原因。

以上是关于在Oracle中将char拆分为多行的主要内容,如果未能解决你的问题,请参考以下文章

在Oracle中将字符串拆分为多行

在Oracle中将字符串拆分为多行

在Oracle中将字符串拆分为多行

如何在 JavaScript 中将长正则表达式拆分为多行?

如何在 Bash 中将字符串拆分为多行?

在同一个数据库表中将一行拆分为多行