Oracle

將文本列 Web 服務數據轉換為列

  • November 15, 2019

我有一個數據庫表,用於儲存籌款捐贈頁面的網路交易。表中的一列儲存了一堆串聯的數據,格式為 ‘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 。因此建議在程序/腳本中的數據庫之外執行此操作

引用自:https://dba.stackexchange.com/questions/253366