2013-02-11 53 views
0

在我的位置我場有:如何在oracle sql查詢中使用正則表達式?

"Location: 
SOME PLACE 

Additional Details: 
DEFECT 
" 

不知怎的,我需要這個取出"SOME PLACE"。我試圖瞭解regexp_substr()函數是如何工作的,但它與我的C#背景非常不同,並且我不斷得到像空值這樣的奇怪結果。

通常我沒有料想到會做這樣的事情:

regexp_substr(LocationField, 'Location:(.*)\n') as "NewLocation" 

,並且它可以切出在括號中的部分...但我錯了。有任何想法嗎?

SOLUTION:

regexp_replace(FIELD, 'Location:'||CHR(13)||CHR(10)||'(.*).*$'||CHR(13)||CHR(10)||CHR(13)||CHR(10)||'Additional Details:.*$', '\1', 1, 1, 'n') as "Location" 

回答

0

,你可以做這樣的:

regexp_replace(LocationField, 
       'location:'||chr(10)||'([^'||chr(10)||']*).*$', '\1', 
       1, 1, 'n') 

即正則表達式字符串

location:\n([^\n]*).*$ 

但甲骨文不會\n我們chr(10)在其位拼接工作。

n模式意味着.將匹配換行符(所以.*$得到下面的一些文本換行後襬脫一切。

如果位置可以有文字,然後加入詳細的多張行,你可以使用:

regexp_replace(LocationField, 
       'location:'||chr(10)||'(.*)'||chr(10)||'Additional.*$', 
       '\1', 1, 1, 'n') as "NewLocation" 
+0

感謝您的回答,它幫助我達到最高標準解。 – sprocket12 2013-02-12 10:43:22

0

使用REGEXP_REPLACE代替:

select REGEXP_REPLACE(target, LocationField, 'Location:(.*)\n', '') as "NewLocation" 
from your_table; 

應該讓你在正確的方向前進。

+0

嗯......你似乎有4個參數,並鏈接有3個我試着用3省略了目標,因爲LocationField是目標,並把杯子還給我整場......? – sprocket12 2013-02-11 15:04:49

0

你需要運行在多行模式正則表達式,這意味着填充REGEXP_SUBSTR()調用的完整簽名:

select regexp_substr(locationField, '^([A-Z ]+)$', 1, 1, 'm') 
from your_table 
/

'm'匹配參數,指定多行模式。這意味着^$中的匹配模式被視爲newline的邊界而不是字符串的開始和結束。 Find out more