我有一个数据库表,用于存储筹款捐赠页面的网络交易。表中的一列存储了一堆串联的数据,格式为 'data1=value1 data2=value2 data3=value3 moredata4=value3..."
这些对表示来自通过休息服务集成的外部数据库的字段/列。天知道为什么会这样存储,但是我需要把这列解析成多列。我无法弄清楚如何以有效和干净的方式做到这一点。
需要注意的是:并非表中的所有记录/行都对组合列中的每个项目都有一个值。因此,您可能会看到 'data1=value1 data2= data3=data3...' 也不是所有连接对中的 'firlds/columns' 都以 'data' 开头,例如,有些人可能会说 'tranamt=50 coupon=2bb2'。还要注意,对之间的“空格”字符实际上是 chr(10) 不是空格。
我真的很感谢任何人对此的帮助。我难住了。我在 stackexchange 和 Google 上对此进行了无休止的研究,但找不到任何可以帮助我解决这种独特情况的东西。我之前已经拆分了分隔列,但没有使用“字段/列”和值对。我也是甲骨文的新手。这是在 Oracle 数据库中。
谢谢!
小提琴手
肯定有很多 Oracle 专家可以编写比这个小提琴更优化的代码(在 Oracle 中)......?
我会在创建这些数据时首先访问它 - 替换您使用的任何机制(看起来像是使用回车符 chr(10) 作为分隔符自行构建的) - 通过适当的 json 序列化 - 这可以实现简单的 json de-序列化
要解析所述列中的现有数据 - 您可以使用 SUBSTR https://www.techonthenet.com/oracle/functions/substr.php和 INSTR https://docs.oracle.com/cd/B28359_01/olap.111 /b28126/dml_functions_1103.htm#OLADM564 Oracle 的函数 - 但我建议您在数据库之外使用您选择的某种编程语言执行此操作
第一个 substr 直到第一次出现 chr(10) .. 等等 - 问题是让 oracle 接受“数据”作为 column-names 。因此建议在程序/脚本中的数据库之外执行此操作