![](/img/trans.png)
[英]Extract data from XML Clob using SQL from Oracle Database
[英]extract data from clob column in oracle
我在 clob 列中有如下數據:
:1A:CAD22021828,17
:1B:RECEIVE GENERAL IND
11 BEGUM ST 3-15A2
VILL AP IND 313 416
:1C:/000061071257 CC
RECEIVER GENERAL FOR IND
C/O PNBB MAIN BRANCH
11 BEGUM ST 3-15A2
AA HYD APIND
現在我的要求是將其加載到目標表中的 3 個單獨的列中,如下所示:
1A - CAD22021828,17
1B - RECEIVE GENERAL IND
11 BEGUM ST 3-15A2
VILL AP IND 313 416
1C - /000061071257 CC
RECEIVER GENERAL FOR IND
C/O PNBB MAIN BRANCH
11 BEGUM ST 3-15A2
AA HYD APIND
有人可以建議我如何做到這一點。
這是 oracle 11.2
我試過下面的代碼;
SELECT
REGEXP_SUBSTR(mc_clob,':1A:([[:alnum:]]+\S+)') AS code1A,
REGEXP_SUBSTR(mc_clob,':1B:([[:alnum:]]+\s+)') AS code1B,
REGEXP_SUBSTR(mc_clob,':1C:([[:alnum:]]+\s+)') AS code1c
FROM tableA;
這是使用帶有捕獲組的REGEXP_SUBSTR
執行此操作的一種方法:
SELECT
REGEXP_SUBSTR(mc_clob, ':1A:(.*):1B:', 1, 1, 'n', 1) AS code1A,
REGEXP_SUBSTR(mc_clob,':1B:(.*):1C:', 1, 1, 'n', 1) AS code1B,
REGEXP_SUBSTR(mc_clob,':1C:(.*)', 1, 1, 'n', 1) AS code1c
FROM tableA;
要了解它是如何工作的,請首先調用REGEXP_SUBSTR
:
REGEXP_SUBSTR(mc_clob, ':1A:(.*):1B:', 1, 1, 'n', 1)
這表示匹配:1A:(.*):1B:
,捕獲:1A:
和:1B:
標記之間的所有內容。 第五個參數是n
,它告訴 Oracle 讓點匹配跨換行符。 也就是說, (.*)
將捕獲兩個標記之間的所有內容,包括跨行。 第六個參數是1
,這意味着返回值將是第一個(也是唯一一個)捕獲組。 類似的邏輯適用於對REGEXP_SUBSTR
的第二次和第三次調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.