2017-10-17 52 views
0

我想在給定模式之前查找文本。我的主要問題是當我的文本有很多行時。regexp_substr:在給定模式之前查找文本

在這裏,例如:

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 

結果是用於第二行假。 它應該是:

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數據庫

回答

3

Oracle documentation在此查詢,第5參數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   | 
+0

打我吧。在oracle中使用'n',然而,大多數語言的標誌是's'。 – ctwheels

+0

您好MTO,謝謝您的回答。這正是我想要的。我只是要添加到我的查詢。這是不正確的,因爲正則表達式是貪婪的。所以爲了避免這種情況,如果我們有兩次模式,我們可以添加一個?到搜索。它將是REGEXP_SUBSTR(k,'。*?錯誤日誌',1,1,'n') – eliatou

相關問題