regexp_substr:在给定的patern之前找到文本

时间:2017-10-17 14:26:37

标签: sql regex oracle

我想在给定模式之前找到文本。我的主要问题是我的文字有很多行。

这里的例子是:

    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数据库上运行此查询

1 个答案:

答案 0 :(得分:3)

Oracle documentation开始,REGEXP_SUBSTR的第五个参数是:

  

match_parameter是一个文本文字,可让您更改函数的默认匹配行为。

哪个有options

  
      
  • 'n'允许句点(.)(匹配任意字符)匹配换行符。如果省略此参数,则句点与换行符不匹配。
  •   

SQL Fiddle

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         |