2014-02-13 2 views
0

내 친구는 특정 형식의 ummm 파일 이름과 비슷하며 첫 해 (YY), 다음 달 (MM) 순차 번호 (SEQ)로 작성되어야하고 데이터베이스에 저장되어야하며 모든 파일이 존재하는지 확인해야합니다 같은 해와 같은 달에 ...정규 표현식을 사용하여 부분 문자열을 검색합니까?

나는 그 부분을 잡기 위해 정규 표현식을 사용하고 있습니다 ... 그 도움을 주셔서 감사합니다. where를 사용하여 레코드를 필터링하고 substr을 사용합니다 이 부분을 잡으려고 나는 쿼리가 그런 일을 할 수 있도록에 대해 이야기 ... 그것이 가장 좋은 방법은 빠른 그런 일을 할 수

Select substr(column_name1,4,4),substr(column_name1,0,2),substr(column_name1,2,2), 
    into seqvar,yearvar,dayvar 
    from table1 
where regex_like (FILENAME,'(CDR-)([1-9][0-9]{0,3})(_[0-9]{2}_[0-9]{2}_[0-9]{2}_[0-9]{4}_UK1\.FCDR) 

입니까 ??

또는 cluase가 더 좋은 곳에서 정규식의 insted insted를 사용 하시겠습니까 ?? ??

당신이 언급 한 부분 만/그룹을 원하는 경우이 경우

+0

원하는 [1-9] 'CDR - ([1-9] [0-9] {0}} _ [0-9] {2} _ [0-9] {2} _에서 [0-9] {0,3} [0-9] {2} _ [0-9] {4} _UK1 \ .FCDR '? 권리 ? – aelor

+0

예 (Y) – user334560415

답변

0

모든 당신의 의견은이를 사용하십시오 :

`/\((.*?)\)/` 

이 불을 지르고에서 이것을 시도

var str = 'CDR-([1-9][0-9]{0,3})_[0-9]{2}_[0-9]{2}_[0-9]{2}_[0-9]{4}_UK1\.FCDR'; 
var res = /\((.*?)\)/.exec(str); 
console.log(res[1]); 

것 출력 : [1-9][0-9]{0,3}

출력이인 경우 290,493,210

사용 : 오라클이 lookaheads을 지원하지 않기 때문에 /(\(.*?\))/

+0

나는 백만 가지가 넘는 레코드를 가지고 있는데, 그 부분을 순차적으로 체크하고 싶습니다. – user334560415

+0

그래서 변수를 지정할 수 없습니다 – user334560415

0

는, 어쩌면 이렇게 보일 수 있습니다 REGEXP_REPLACE

를 사용하는 easyer 될 것입니다 :

select regexp_replace(FILENAME, '(CDR-)([1-9][0-9]{0,3})(_[0-9]{2}_[0-9]{2}_[0-9]{2}_[0-9]{4}_UK1\.FCDR)', '\2') 
    from .... 
+0

[여기는 sqlfiddle 데모입니다] (http://www.sqlfiddle.com/#!4/5b952/3) –

+0

ok thats는 내가 말했던 SEQ 부분을 얻을 것이다. 그러나 내가 정말로 필요로하는 것은 그 부분을 변수에 저장하거나 그 부분을 사용하여 체크하는 것이다. 그들이 순차적이든 아니든간에 전체 목록에서 누락 된 숫자를 얻는다면 1 백만 레코드는 어떻게됩니까? – user334560415

+0

아마도 뭔가 빠졌을 것입니다.하지만 1,500,000 개의 행에 4 자리 시퀀스가있을 수 있습니까? 어쨌든 왜 변수에 값을 넣을 수 없습니까? 'SELECT regexp .... INTO your_variable FROM ... '. 그러나 당신은 또한 그 연속 번호에 대한 다른 견해를 가질 수 있으며, 왼쪽 외부는 귀하의 질의와 함께 참여할 수 있습니다. –

관련 문제