T-SQL 및 WHERE LIKE % Parameter % 절


84

WHERE LIKE '% text %'절을 사용하는 문을 작성하려고했지만 텍스트에 매개 변수를 사용하려고 할 때 결과를받지 못했습니다. 예를 들어 다음과 같이 작동합니다.

SELECT Employee WHERE LastName LIKE '%ning%'

그러면 Flenning, Manning, Ningle 등의 사용자가 반환됩니다. 그러나이 문은 다음과 같지 않습니다.

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%@LastName%'

검색 결과가 없습니다. 어떤 제안? 미리 감사드립니다.

답변:


158

그것은해야한다:

...
WHERE LastName LIKE '%' + @LastName + '%';

대신에:

...
WHERE LastName LIKE '%@LastName%'

1
질문에 대한 이전 팁에 감사드립니다. 하지만 그렇지 않았습니다. 어쨌든 높은 성과를내는 답을 찾는데 유용합니까? :)
bonCodigo

1
@bonCodigo 정말 잘 모르겠습니다. 성능과 최적화는 제 영역이 아닙니다. 또한 이러한 기능은 공급 업체별로 다르며, 귀하의 경우 Oracle RDBMS가 기능을 평가하는 방법에 따라 다르며 저는 Oracle을 모릅니다. 죄송합니다.
Mahmoud Gamal 2013 년

3
이것은 나를 위해 작동하지 않았습니다. %는 addParameter 섹션에 있어야합니다. 참조 제임스 쿠란의 대답은 여기 stackoverflow.com/questions/251276/...
bendecko

2
내 대답을 참조하십시오 (현재 아래). 와일드 카드 기호는 sql-query의 일부가 아니라 SEARCH 표현식의 일부입니다. USER가 입력합니다 (또는 와일드 카드 검색이 사전 정의 된 경우 사용자 검색 표현식 입력에 추가됨). 데이터베이스 수준에서 문자열 연결을 통해 추가하면 재사용 할 수없는 쿼리 문자열이 생성됩니다.
swe

16

정답은 '%'-기호가 검색 표현식의 일부 이기 때문에 VALUE의 일부 여야하므로 설정하는 곳 @LastName(프로그래밍 언어 또는 TSQL에서)로 설정해야한다는 것입니다.'%' + [userinput] + '%'

또는 귀하의 예에서 :

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%' + @LastName + '%'

8

당신은 이것을 시도 할 수 있습니다, 사용 CONCAT

WHERE LastName LIKE Concat('%',@LastName,'%')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.