簡體   English   中英

從 oracle 中的 clob 列中提取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM