这就是我在Oracle 12 c中获得结果的方式
| 开始日期范围|结束日期范围| End Date Range |
| --|--| ------------ |
| [“2019-01-07”,“2019-02-17”,“2019-03-17”]|[“2019-01-14”,“2019-02-21”,“2019-03-21”]| [ "2019-01-14","2019-02-21","2019-03-21"] |
我想要
| 开始日期范围|结束日期范围| End Date Range |
| --|--| ------------ |
| 2019-01-07| 2019-01-14 2019-01-14| 2019-01-14 |
| 2019-02-17 2019-02-17| 2019-02-21 2019-02-21| 2019-02-21 |
| 2019-03-17 2019-03-17| 2019-03-21 2019-03-21| 2019-03-21 |
早些时候我问过这个问题的单列分裂和下面的链接如何取代特殊字符,然后打破行在甲骨文但当我添加另一列有笛卡尔积。
4条答案
按热度按时间vcirk6k61#
您可以使用
json_table
从JSON数组中提取字符串,假定为实际日期:for ordinality
子句为每个数组提供了一个索引,然后连接匹配“相关”的数组条目。如果出于某种原因需要字符串而不是日期,则可以在column子句中更改数据类型。
db<>fiddle
vaqhlq812#
您也可以在将
[
、]
和"
替换为空格后,使用regexp_substr
和connect by
执行此操作。Schema和insert语句:
查询:
输出:
| 开始日期范围|结束日期范围|水平| LEVEL |
| --|--|--| ------------ |
| 2019-01-07| 2019-01-14 2019-01-14| 1| 1 |
| 2019-02-17 2019-02-17| 2019-02-21 2019-02-21| 2| 2 |
| 2019-03-17 2019-03-17| 2019-03-21 2019-03-21| 3| 3 |
00jrzges3#
在对OP的评论中,我指出数据模型不太正确。两个JSON数组中的值是相关的;这样的数据应当被编码在单个对象中,而不是两个对象中。应该有一个对象数组,每个对象有两个成员:开始日期和结束日期。
为了说明我所建议的数据模型,我从一个示例输入表(带有一个额外的id)开始,我使用Alex Poole的答案来生成OP所询问的表,然后我使用JSON生成函数将数据重新转换为JSON格式,以说明我认为输入数据应该是什么样子。(JSON字符串的提供者应该以这种格式创建JSON,而不是发送两个单独的表示日期的字符串JSON数组)。
我在这里没有展示的是如何使用对
JSON_TABLE
的单个调用从查询结束时创建的单个对象数组中拆分数据。这比从两个单独的JSON数组中获取数据的查询要简单得多。注意-这不是一个真正的答案;我把它写成一个答案,因为它显然不适合评论。
输出:
vhipe2zx4#
谢谢..我实际上有JSON格式的最后输出。我如何从那后面得到匹配的开始和结束日期?