커다란 고객 데이터 목록이 있습니다. Address1
열에서 5 자리 숫자의 우편 번호 만 받고 싶습니다. TSQL : 문자열에서 고정 길이의 숫자 만 추출하는 방법
SELECT
(SELECT LEFT(SUBSTRING(Address1, PATINDEX('%[0-9]%', Address1), 8000),
PATINDEX('%[^0-9]%', SUBSTRING(Address1, PATINDEX('%[0-9]%', Address1), 8000) + 'X') -1))
FROM CustomerList where LEN(LEFT(SUBSTRING(Address1, PATINDEX('%[0-9]%', Address1), 8000),
PATINDEX('%[^0-9]%', SUBSTRING(Address1, PATINDEX('%[0-9]%', Address1), 8000) + 'X') -1)) = 5 -- Get only records that has exactly 5 value
위의 코드를 들어, 다음과 같은 데이터가 작동합니다
"str을 부티레이트 존스 40030이.."-
"40030"을받을 수 그러나 다음 데이터가 작동하지 않습니다.
"22 Str. Mel 50630"- 우편 번호가 아닌 "22"번지 수만 가능합니다.
"65-31 캄파 르 47000 바우는"- 만 65
"부지 199 Guasa 30,990 오마르"을받을 수 - 만
199 그래서 내 코드는 우편 번호 만이 레코드를 얻을 수 있습니다 얻을 수 있습니다. Address1
에 다른 번호가 포함되어 있으면 작동하지 않습니다.
도와주세요.
편집 :
은 분명히 내 현재 코드는`왼쪽에서 숫자를 읽기 시작되고, 나는 RIGHT 대신에서 읽기 시작하는 현재의 코드를 수정할 수있는 방법이있다? 당신이 이런 식으로 뭔가를 사용하려고 할 수 있습니다 게시 예와
데이터의 우편 번호는 항상 주소의 마지막/마지막 부분에 있습니까? – Tyron78
거대한 데이터 목록이있는 경우 우편 번호는 * 별도 * 필드 여야합니다. * 하나 * 우편 번호에 대해 검색 할 때마다 1M 행을 분석한다고 가정 해보십시오. –
@PanagiotisKanavos 데이터가 클라이언트에 의해 제공되므로 필터링하고 다른 열로 분리해야합니다. –