2014-11-25 3 views
-1

Oracle SQL Developer에서 regexp_substr 및 instr을 사용하여 데이터베이스에서 값을 가져 와서 오른쪽에서 왼쪽으로 첫 번째 "/"로 이동 한 다음 값을 오른쪽으로 사용하려고합니다. Oracle SQL Developer의 Oracle INSTR이 작동하지 않습니다.

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

나는 값의 바로 03_28_54_9_0000011856.pdf 일부와 끝까지 노력하고 있어요. 나는 다음과 같은 SQL이 있습니다

select regexp_substr(download, '(.*)/', instr(download,'/',1,4)+1,1,'i',1) 
from access_log; 

하지만 SQL Developer에서 다음과 같은 오류가 점점 오전 :

ORA-00939: too many arguments for function 
00939. 00000 - "too many arguments for function" 
*Cause:  
*Action: 

나는이 오류가 무엇입니까 내가이 일을 할 수있는 방법 왜 누군가가 말해 주시겠습니까

+0

'download' 컬럼의 유형은 무엇입니까? – Dmitry

+0

실제 사용 케이스에'REGEXP_INTSTR'과'INSTR'의 조합을 강제하는 것이 있습니까? – Abecee

+1

쉬운 접근법 :'regexp_replace (다운로드, '. * /', '') –

답변

2

이동 :
SELECT REGEXP_REPLACE('file:/webdocs/data/groupXXX/case/03_28_54_9_0000011856.pdf', '^.*/(.*)/.*$', '\1') FROM DUAL;

2

instrregexp_substr의 조합은 매우 복잡해 보입니다. 마지막 슬래시 후에 모든 걸 원하니? 간단한 대답을 찾는 열쇠는 정규식에 도움이되는 기술입니다. 문제가 어려워 보이는 경우이를 반대로하십시오. 당신이 지키고 자하는 것에 대해 생각하는 대신에, 당신이 제거하고자하는 것에 대해 생각하십시오. 이 경우

당신과 마지막 슬래시 등까지 모든 것을 제거하려면, 그것은 정말 쉬운 정규 표현식이다 : .*/

그래서 그냥 일치 빈 문자열로 대체합니다. 골 포스트와

regexp_replace(download, '.*/', '') 
+0

기다려 ...이게 옳지 않아 ... 오른쪽에서 2 번째 "/"부터 오른쪽의 첫 번째 "1"로 가야합니다 ... "케이스"로 끝나야합니다 – JMS

+0

원본 쿼리가 나를 위해 (사례 문자열을 복사하고 DUAL에 대해 실행할 때) "사례"를 반환했으나 실패하지 않았습니다. 명시 적으로 Wumpus Q. Wumbley가 제공하는 "03_28_54_9_0000011856.pdf"를 묻습니다. – Abecee

+0

soeone "사례"를 얻는 방법을 보여줘. – JMS

관련 문제