저장 프로 시저를 사용하여 SQL Server 2005에서 문자열에 하위 문자열이 포함되어 있는지 확인


245

나는 문자열을 가지고있다 @mainString = 'CATCH ME IF YOU CAN'. 단어 ME가 안에 있는지 확인하고 싶습니다 @mainString.

SQL에서 문자열에 특정 하위 문자열이 있는지 어떻게 확인합니까?

답변:


395

CHARINDEX ()는 더 큰 문자열에서 하위 문자열을 검색하고 일치하는 위치를 반환하거나 일치하는 항목이 없으면 0을 반환합니다.

if CHARINDEX('ME',@mainString) > 0
begin
    --do something
end

다니엘스의 답변을 편집 하거나 단어의 하위 구성 요소가 아닌 단어를 찾으려면 CHARINDEX 호출은 다음과 같습니다.

CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ')

발생할 수있는 다른 구두점에 대해 재귀 REPLACE () 호출을 더 추가하십시오.


2
오키 나는 PATINDEX를 사용했다. 감사합니다!
NLV

1
s / recursive / nested /- "재귀 적"은 REPLACE자체적으로 호출 되는 경우 입니다. "중첩 됨"은 함수 호출 결과가 즉시 다른 함수로 전달되는 경우입니다.
기금 모니카의 소송

2
'ME'는 SQL에서 대소 문자를 구분합니까, 아니면 'Me'및 'me'에 대해 if 문을 수행해야합니까?
a.powell 17

5
@ a.powell-관련된 데이터 정렬에 따라 다릅니다. 어떤 식 으로든 필요한 경우 언제든지이 테스트 내에서 강제로 적용 할 수 있습니다. 예 비교 select CHARINDEX('ME' collate Latin1_General_CS_AS,'Home')하고 select CHARINDEX('ME' collate Latin1_General_CI_AS,'Home'). 데이터 정렬에서 CS대소 문자 구분을 나타내며 작업 할 수 있다고 확신합니다 CI.
Damien_The_Unbeliever

2
@VincePanuccio-T-SQL의 문자열 처리는 매우 약합니다. SQL의 장점은 집합 기반 작업입니다. 이 경우 (문자열 처리 및 정규식이 확실한 해결책이 될 수있는 무언가를 원함), 작업에 대해 잘못된 도구를 선택하는 경우가 더 많습니다.
Damien_The_Unbeliever

120

술어에서 와일드 카드를 사용할 수 있습니다 (IF, WHERE 또는 ON 이후).

@mainstring LIKE '%' + @substring + '%'

이 특정한 경우에

' ' + @mainstring + ' ' LIKE '% ME[., ]%'

(전체 단어를 찾으려면 인용 된 문자열에 공백을 넣거나 ME가 더 큰 단어의 일부가 될 수 있으면 공백을 남겨 두십시오).


3
단어 일치 (두 번째 예)를 찾는 경우 a) @mainString 앞뒤에 공백을 추가하고 (첫 번째 또는 마지막 단어와 일치시킬 수 있음) b) 구두점 제거
Damien_The_Unbeliever

2
내 경우에는 제한된 권한으로 인해 CHARINDEX () 함수를 실행할 수 없기 때문에 CHARINDEX ()보다 낫습니다.
James T Snell

1
( N열이 인 경우 모든 문자열 상수 앞에 접두사를 붙이는 것을 잊지 마십시오 nvarchar. 그렇지 않으면 행당 변환을 얻습니다)
Richard Szalay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.