2013-02-11 77 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