2014-11-24 69 views
1

我想在oracle SQL中找到一種方法,將第一個「/」從右到第四個「/」之後的所有文本。我需要做的這一個SQL語句..在Oracle SQL中向後Oracle INSTR

table name: access_log 
col name: download 
value: Download file:/webdocs/data/groupXXX/case/03_28_54_9_0000011856.pdf 

我試圖用

case 

那麼有多少匹配的計數結束了?這可以做到嗎?

+0

定的反向從左邊,反向扭轉一個字符串,也許你可以逆轉,比賽? – 2014-11-24 19:01:22

+1

其實,它必須可能與(可能多個)REGEXP_SUBSTR? – 2014-11-24 19:04:57

+0

很抱歉,但我不明白你想要什麼算究竟 – Aramillo 2014-11-24 20:21:40

回答

0

一個簡單SUBSTR方法從Oracle 10g的+

select TRIM(BOTH '/' FROM 
      substr(
        download, 
        INSTR(download,'/',1,4), 
        INSTR(download,'/',1,5)-INSTR(download,'/',1,4) 
       ) 
      ) 
FROM ACCESS_LOG; 

作品和計數可能是,

SELECT 
COUNT(
     CASE WHEN TRIM(BOTH '/' FROM 
         substr(
           download, 
           INSTR(download,'/',1,4), 
           INSTR(download,'/',1,5)-INSTR(download,'/',1,4) 
           ) 
         ) = 'case' 
     THEN 
      1 
     END 
     ) COUNT_MATCHED 
FROM 
    ACCESS_LOG; 
+0

我需要這個來自數據庫而不是硬編碼值 – JMS 2014-11-24 20:11:29

+0

只是刪除了'WITH'子句和你有.. – 2014-11-24 20:13:19

+0

吧?我不明白 – JMS 2014-11-24 20:32:39

1
select regexp_replace('Download file:/webdocs/data/groupXXX/case/03_28_54_9_0000011856.pdf', 
         '.*/([^/]+)/[^/]*$', '\1') from dual; 
+0

我不從我需要從數據庫中值 – JMS 2014-11-24 20:12:08

+0

@JMS也許你可以提供更多的樣本記錄測試提供了兩種方法的硬編碼值需要。 – 2014-11-24 20:19:22

+0

我的確找到了這個值並且統計了它在數據庫中的次數 – JMS 2014-11-24 20:32:07