저장 프로 시저를 사용하여 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.