2016-06-13 109 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)