2016-06-13 111 views
1

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

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

只需使用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过于复杂的表达式。

+0

感谢您的详细信息。 – user747291

1

尝试

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

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