instr与正则表达式在oracle中进行字符串匹配

时间:2016-06-13 16:15:55

标签: regex oracle

我使用以下内容获取过去60天内访问过的网页的最大数量,我需要在网址中找到匹配的内容#abc.cfm'或' / entity /'。有没有办法用正则表达式做到这一点?以下方法可以使用,还是有更好的方法。提前致谢。

SELECT url, count(URL)
  FROM tableone
  WHERE ( INSTR(url, 'abc.cfm') > 0 
   or  
         INSTR(url, '/entity/') > 0 )
and VIEW_DT > sysdate - 60
group by URL
order by count(URL)  desc

2 个答案:

答案 0 :(得分:2)

只需使用like即可。这通常比instr快一点,比regexp_like 快:

 WHERE (  url like '%abc.cfm%'
       or url like  '%/entity/%'
       )

我在一张1.8M行的表格上进行了测试,其中700行符合标准。重复测试的大致时间是:

instr         0.9 seconds
regexp_like  15.0 seconds
like          0.6 seconds

我只会将regexp_like用于like过于复杂的表达式。

答案 1 :(得分:1)

尝试

regexp_like(url,'(abc.cfm|/entity/)')

而不是

( INSTR(url, 'abc.cfm') > 0 
   or  
         INSTR(url, '/entity/') > 0 )