Oracle SQL - 在字符串中查找字符串模式

时间:2017-09-22 16:13:22

标签: sql string oracle

我需要从字符串中提取一些文本,但仅限于文本与字符串模式匹配的位置。字符串模式将包含...

2个数字,正斜杠和6个数字 例如一十二万三千四百五十六分之十二

2个数字,正斜杠,6个数字,连字符和2个数字 例如12 / 123456-12

我知道如何使用INSTR查找特定的字符串。是否可以找到与特定模式匹配的字符串?

3 个答案:

答案 0 :(得分:1)

您需要使用regexp_like来过滤结果,并使用regexp_substr来获取子字符串。

这大致是它的样子:

select id, myValue, regexp_substr(myValue, '[0-9]{2}/[0-9]{6}') as myRegExMatch
from Foo
where regexp_like(myValue,'^([a-zA-Z0-9 ])*[0-9]{2}/[0-9]{6}([a-zA-Z0-9 ])*$')

带有SQLFiddle的链接,您可以在行动中看到并根据自己的喜好进行调整。

上面示例中提供的regexp_like考虑了可能绑定数字模式的字母数字和空白字符。

答案 1 :(得分:0)

使用regexp_like

where regexp_like(col_name,'\s[0-9]{2}\/[0-9]{6}(-[0-9]{2})?\s')
  • \s匹配一个空格。在模式的开头和结尾包括它们。
  • [0-9]{2}\/[0-9]{6}匹配2个数字,正斜杠和6个数字
  • (-[0-9]{2})?对于前一个模式后的连字符和2个数字是可选的。

答案 2 :(得分:0)

regexp_like(col_name,'^\d{2}/\d{6}($|-\d{2}$)')

regexp_like(col_name,'^\d{2}/\d{6}(-\d{2})?$')