2014-04-29 3 views
1

순수 SQL을 사용하여 다음 문자열에서 x의 수를 계산할 수 있습니까?카운트 문자 패턴 일치

708258761XXXXXXXX00A 
708232761XXXXXXXXXXA 

결과 이전 문자열은 내가 쉽게 코드에서이 작업을 수행 할 수

8 
10 

되는,하지만 난이 일에 대한 순수한 T-SQL 방법을 찾고 있어요에 대해 실행했을 때.

패턴은 내가보고있는 제품에 따라 X의 숫자가 다양합니다.

다른 말로하면, 내가 찾고있는 것은 순수한 SQL 패턴 매치 수를 계산하는 방법입니다.

위의 예에서 입력 패턴은 X입니다. Ted 다음의 검색 패턴으로, 또 다른 예를 사용하면 3의 값을 반환 할 수 :

테드 테드입니다 테드가 굉장하기 때문에!

답변

2

@pattern이라는 변수를 추가하여 검색 패턴 문자열을 저장했습니다.

이렇게하면 패턴의 각 인스턴스를 제거하고 제거 된 문자 수를 확인한 다음 제거 된 문자 수를 검색 패턴의 길이로 나눠서 일치 수를 계산합니다.

DECLARE @pattern varchar(20) = 'Ted' 

SELECT (Len(ColumnToSearch) - Len(Replace(ColumnToSearch, @pattern, '')))/Len(@pattern) 
AS Number_Of_Matches 
FROM MyTable 

이 계산을 자주 수행해야하는 경우이를 기반으로 함수를 쉽게 만들 수 있습니다. 아담 Porad에서

2

멋진 대답하지만 didn를, t는 LEN 후행 공백이 포함되지 않는 것을 잊지 : 대신

DECLARE @pattern varchar(20) = 'Ted '; 
SELECT LEN(@pattern) -- return 3 

사용 DATALENGTH을 :

DECLARE @pattern varchar(20) = 'Ted '; 
DECLARE @ColumnToSearch VARCHAR(1000) = 'Ted is Ted because Ted is awesome!'; 

SELECT (DATALength(@ColumnToSearch) - DATALength(Replace(@ColumnToSearch, @pattern, '')))/DATALength(@pattern), 
     (Len(@ColumnToSearch) - Len(Replace(@ColumnToSearch, @pattern, '')))/Len(@pattern), 
     (Len(@ColumnToSearch) - Len(Replace(@ColumnToSearch, @pattern, ''))), 
     Len(@ColumnToSearch), 
     Len(@pattern) 
AS Number_Of_Matches