2014-06-17 4 views
0

아마도 단순한 것이지만 SQL에서이 작업을 수행하는 데 문제가 있습니다. (VBA는 쉽다).문자열 값 두 개 사이의 문자열 찾기

xxx_123_abcd에서 123 부분을 추출해야합니다. 때로는 문자열이 xxx_123_abcd_xxx 일 수 있기 때문에 _에 대한 코드 검색은 항상 왼쪽에서부터 수행해야합니다. 어떤 조언에 미리

감사합니다 :)

+4

이것은 잘 설명되지 않았다. 당신이 필요로하는 것을 정확하게 정할 수 있습니까? –

+0

제 조언은 : 부분 문자열에 관심이 있다면 rdbms에서 'xxx_123_abcd_xxx'와 같은 문자열을 피하십시오. 'xxx', '123', 'abcd', 'xxx'대신 네 개의 열이 있어야합니다. 문자열 조작에 관해서는 무엇을 추출 하시겠습니까? 첫 번째 정수? 두 번째 부분 문자열? –

+0

숫자는 항상 123입니까? 길이는 항상 3 자리입니까? –

답변

1

사용 CHARINDEX를 사용할 수 있습니다. 이런 식으로 뭔가 작업을해야합니다 :

SELECT 
    SUBSTRING(MyColumn, CHARINDEX('_', MyColumn)+1, 
     CHARINDEX('_', MyColumn, CHARINDEX('_', MyColumn)+1)-CHARINDEX('_', MyColumn)-1) 
FROM 
    MyTable 

MyColumn는 = xxx_123_abcd_xxx은 위의 코드를 사용하여 123을 생산하고 있습니다.

가정 : 찾고있는 문자열은 밑줄의 첫 번째 및 두 번째 발생으로 묶입니다.

+0

답변 해 주셔서 감사합니다. 모두에게, 내가 찾고 있던 반환 값이 두 didgits 일 수 있다고 지정 했어야했다. –

1

설명 here와 같은 사용자 정의 분할 기능을 사용하십시오. xxx_123 부분은 같은 길이가 항상 경우

, 당신은 또한 당신이 SUBSTRING에 필요한 문자열의 일부를 추출 할 수 있도록, 밑줄을 검색

SUBSTRING('xxx_123_abcd',5,7) 
1

가정

  1. 당신이 찾고있는 숫자 문자열이 문자열에 항상 세 자리
  2. 그것은 항상 즉시의 첫 번째 발생을 따르는 '_'
  3. 앞에는 '_'입니다
  4. 그런

이 작동

SELECT SUBSTRING('xxx_123_abcd',CHARINDEX('_','xxx_123_abcd')+1,3) 
1

너도 이와 함께 할 수있다

SELECT LEFT(Col1,PATINDEX('%[^0-9]%', Col1+'a')-1) from(
    SELECT SUBSTRING(Col1, PATINDEX('%[0-9]%', Col1), LEN(Col1)) As Result From table 
)x 
관련 문제