我在clob列中有如下数据:
$schedule->command('mycommand')->cron('0 17 3,5,7,22 * *');
现在我的要求是将其加载到目标表的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
我尝试了以下代码;
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
答案 0 :(得分:1)
这是对捕获组使用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
的第二次和第三次调用。