필자가 요구하는 것은 전달 된 문자열과 비교하여 임의의 수의 문자와 일치하는 열의 문자열을 검색 할 수 있도록하는 것입니다. 예를 들어T-SQL의 접두어가 아닌 임의의 문자열 검색
는 :
나는 Hello
을 통과하면 내 테이블 열이있는 경우 쿼리에 비해 Tell
두 문자열에 ll
을 일치하는 Tell
을 선택해야합니다. 주문이 없기 때문에 단일 문자의 일치에도 결과를 줄 수 있습니다. 두 문자가 일치해야하는 두 문자가 일치해야하는 경우 두 문자가 임의의 위치 즉, you
및 our
에서 임의로 선택되지 않으면 두 문자 모두에 동일한 순서로 ou
이 있으므로 두 문자가 일치합니다. 나는 Westbrook
에 brook
찾아보실 수 있습니다
while begin(@counter <= lengthOfPassedString)
select Name from column where column LIKE + '%' + SUBSTRING(@parameterFromUser, 1, @counter) + '%'
end
즉 그러나 위의 코드를 루프의 길이까지 내 쿼리에 Substring
를 사용하는 지금까지 생각했지만 내가 문자열로 krook
을 통과하면 krook
에서 rook
를 찾을 수 없습니다 무엇 westbrook
은 표의 열에있었습니다.
SUBSTRING 메서드의 시작 위치에도 중첩 된 while
루프를 사용하는 것이 좋습니다. 퍼포먼스는 (lengthofstring)^2이 될 것이지만 더 좋은 접근 방법을 알고 싶어합니다. 그것은 단지 9 자까지 입력 작동
: 당신은 두 글자 이상 일치 할 필요는 가정
param1 = 'abc'를 사용하면 'a' 또는'b' 또는 'c'문자가 포함 된 단어가 반환되어야합니까? 또는 적어도 두 개 : ab 또는 bc와 일치해야합니까? 전달 된 문자열의 최대 길이에 대해 가정 할 수 있습니까? 그런 다음 루프없이 입력 매개 변수를 따라 2 자마다 매우 긴 OR을 사용할 수 있습니다. –
@ Nick.McDermaid : 적어도 하나 이상 일치해야합니다. 예, 우리는 전달 된 문자열의 최대 길이를 가정 할 수 있습니다. 무차별 기술을 이해하고 그것이 내 질문에서 중첩 된 while 루프를 말했을 때의 의미입니다. 끝 위치와 시작 위치에 대한 외부 루프 카운터를 유지하는 내부 루프가 있지만 더 좋은 방법은 무엇입니까? – Simran
실제로 하나 이상입니다. 그 이유는 일치하고 일치하지 않는 문자의 비율을 차지하게 될 것이므로 모든 문자가 일치해야합니다. 그 두 문자가 일치해야하는 경우 두 개 이상의 문자가 연속적이어야하며 ou가 두 문자열에 동일한 순서로 존재하기 때문에 두 문자가 일치합니다. 즉 임의의 위치에서 무작위로 선택되지 않습니다. – Simran