我想在给定模式之前找到文本。我的主要问题是我的文字有很多行。
这里的例子是:
SQL> with foo as
2 (select '1 first test error log blabla ' k from dual
3 union
4 select '2 second test
5 zz error log blablabla ' k from dual
6 )
7 SELECT REGEXP_SUBSTR(k,'.*error log',1,1) AS result_
8 ,k from foo;
RESULT_ K
------------------------------------- -------------------------------------
1 first test error log 1 first test error log blabla
zz error log 2 second test
zz error log blablabla
第二行的结果为false。 它应该是:
RESULT_ K
------------------------------------- -------------------------------------
1 first test error log 1 first test error log blabla
2 second test 2 second test
zz error log zz error log blablabla
我在11.2 Oracle数据库上运行此查询
答案 0 :(得分:3)
从Oracle documentation开始,REGEXP_SUBSTR
的第五个参数是:
match_parameter
是一个文本文字,可让您更改函数的默认匹配行为。
哪个有options:
'n'
允许句点(.
)(匹配任意字符)匹配换行符。如果省略此参数,则句点与换行符不匹配。
Oracle 11g R2架构设置:
CREATE TABLE table_name ( k ) AS
SELECT '1 first test error log blabla ' FROM DUAL UNION ALL
SELECT '2 second test
zz error log blablabla ' FROM DUAL;
查询1 :
SELECT REGEXP_SUBSTR(k,'.*error log',1,1,'n') AS result_,
k
FROM table_name
<强> Results 强>:
| RESULT_ | K |
|------------------------|--------------------------------|
| 1 first test error log | 1 first test error log blabla |
| 2 second test | 2 second test |
| zz error log | zz error log blablabla |