2016-08-05 2 views
-2

를 사용하여 복잡한 텍스트 패턴을 추출 나는이처럼 보이는 텍스트 패턴을 추출해야합니다 : 텍스트 필드에 따라서에서는 SQL 기능

NN-NNN-NNNNNNNNN 
(2digit,minus, 3digits,minus,9digits) 

. 예를 들어, 특정 필드는 다음과 같습니다.

"fsadlk fasldkl jhkjfd khjfasd 11-333-878787618 hfsd uhjkfads" 

선택 라인 11-333-878787618에서 추출해야합니다. DB2 AS400을 사용하고 있지만 SQL 함수 구문이 도움이 될 것입니다.

+2

사용중인 데이터베이스에 귀하의 질문에 태그를하시기 바랍니다. 또한 질문을 편집하고 샘플 데이터 및 원하는 결과를 제공하십시오. –

+1

또한 일부 샘플 테이블 데이터와 예상 결과를 추가하십시오. – jarlh

답변

1

다음과 같은 점에서 유용 할 수 있습니다. 나는뿐만 아니라 추출을 추가 할 수 있습니다,하지만 난 여기까지받은 후, 그 이미 이해 될 수있다 생각 :

create table patterns (p varchar(65), find_at smallint) 
; 
insert into patterns values           
    ('fsadlk fasldkl jhkjfd khjfasd 11-333-878787618 hfsd uhjkfads',31) 
,('weroiu 11-333-8787zz618 oiuwens snkdl osjlwhe'    ,00) 
,('nm,sdj xhdgweufyen sndh 711-333-878787618 hfsd uhjkfads'  ,26) 
,('nm,sdj xhdgweufyen sndh 11-333-8787876187 hfsd uhjkfads'  ,25) 
-- ....+....1....+....2....+....3....+....4....+....5....+....6.  
; 
select translate(p, '9', '', '9') as translated 
    , smallint(locate('99-999-999999999'    
       , translate(p, '9', '', '9')) 
       ) as located        
    , find_at           
from patterns            
; -- report from the above query follows: 
TRANSLATED               LOCATED FIND_AT 
fsadlk fasldkl jhkjfd khjfasd 99-999-999999999 hfsd uhjkfads   31  31 
weroiu 99-999-9999zz999 oiuwens snkdl osjlwhe       0   0 
nm,sdj xhdgweufyen sndh 999-999-999999999 hfsd uhjkfads     26  26 
nm,sdj xhdgweufyen sndh 99-999-9999999999 hfsd uhjkfads     25  25 
+0

놀라운 작품! 고마워요! –

1

수행하려는 작업을 제공하는 내장 SQL 기능은 없습니다. this을 살펴 보시기 바랍니다. 그것은 사용자 정의 함수를 사용하여 iSeries DB2 SQL에서 정규 표현식을 수행하는 방법에 관한 IBM 게시물입니다. 그리고 정규식 패턴은 텍스트가 될 것이다 맞게 :

\d{2}-\d{3}-\d{9} 

그러나 IBM은 다소 제한 구현이 정규식 기능 :

\d\d-\d\d\d-\d\d\d\d\d\d\d\d\d 

적절한 정규 표현식 패턴을 사용하는 것이 좋을 것이다.

+1

https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_71/db2/rbafzregexp_like.htm의 문서에 따르면 {n} 수정자는 적어도 v7.1 이상에서 작동해야합니다. 실제주의 사항은 유니 코드 용 국제 구성 요소가 설치되어야한다는 것입니다. 여기에 설치되어있는 것은 없으므로 이것을 테스트 할 수 없습니다. 찾으려는 DB2 함수는'REGEXP_LIKE'입니다. – jmarkmurphy

+0

BTW IBM i 용 ICU를 찾으려면 운영 체제의 옵션 39입니다. – jmarkmurphy

+0

대단히 감사합니다! 내가 iSerious SQL 환경에서 실행할 수 있지만 정규식은 매우 강력합니다 –