[SQL] 어디에서 검색 조건을 '%'를 사용하여 SQL 'LIKE'쿼리 '%'포함
SQL어디에서 검색 조건을 '%'를 사용하여 SQL 'LIKE'쿼리 '%'포함
나는 다음과 같은 SQL 쿼리가 있습니다.
Select * from table
where name like '%' + search_criteria + '%'
search_criteria는 'ABC'= 있으면 괜찮지 xxxabcxxxx를 포함하는 데이터를 리턴한다.
내 search_criteria는 =하지만 'ABC %', 그것은 여전히 사건해서는 안되는 xxxabcxxx을 포함하는 데이터를 반환합니다.
어떻게이 상황을 어떻게 처리하나요?
해결법
-
==============================
1.당신이 search_criteria에 % 기호가 리터럴 문자로보다는 와일드 카드로 취급하려면, [%]로 탈출
당신이 search_criteria에 % 기호가 리터럴 문자로보다는 와일드 카드로 취급하려면, [%]로 탈출
... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
-
==============================
2.이스케이프 절을 사용 :
이스케이프 절을 사용 :
select * from (select '123abc456' AS result from dual union all select '123abc%456' AS result from dual ) WHERE result LIKE '%abc\%%' escape '\'
결과
123abc%456
당신은 당신이 원하는대로 당신의 이스케이프 문자를 설정할 수 있습니다. 이 경우, 기본 '\'. 는 '\ %'를 탈출 그래서 다시, 두 번째 '%가'이스케이프되지 않은 문자 와일드 카드가된다.
SQL LIKE 절의 특수 문자의 목록을 참조하십시오
-
==============================
3.가장 쉬운 해결책은 모두 "와 같은"로 분배하는 것입니다 :
가장 쉬운 해결책은 모두 "와 같은"로 분배하는 것입니다 :
Select * from table where charindex(search_criteria, name) > 0
내가 좋아하는 이상 charIndex의 선호합니다. 역사적으로, 더 나은 성능을했다,하지만 지금은 많은 차이를 만드는 있는지 확실하지 않습니다.
-
==============================
4.당신이 사용할 수있는 SQL에서 문자를 탈출하세요! :
당신이 사용할 수있는 SQL에서 문자를 탈출하세요! :
예 - ESCAPE 문자를 사용하여
이 패턴 매칭 "이스케이프 문자"하는 방법을 이해하는 것이 중요합니다. 이 예제는 오라클의 문자를 탈출 구체적으로 다루고있다.
하자 당신은 % 또는 SQL LIKE 조건에서 _ 문자를 검색하고 싶었다 말한다. 당신은 이스케이프 문자를 사용하여이 작업을 수행 할 수 있습니다.
당신은 단지 하나의 문자 (1의 길이)로 이스케이프 문자를 정의 할 수 있습니다.
예를 들면 :
SELECT * FROM suppliers WHERE supplier_name LIKE '!%' escape '!';
이 SQL LIKE 조건 예제 식별합니다! 이스케이프 문자로 문자. 이 문장은 그의 이름 % 모든 공급 업체를 반환합니다.
여기에 SQL LIKE 조건에서 이스케이프 문자를 사용하여 다른 더 복잡한 예이다.
SELECT * FROM suppliers WHERE supplier_name LIKE 'H%!%' escape '!';
이 SQL LIKE 조건의 예는 이름이 H로 시작 및 종료 %의 모든 공급 업체를 반환합니다. 예를 들어, 같은 '안녕 %'로 값을 반환합니다.
또한 SQL LIKE 조건에서 _ 문자로 이스케이프 문자를 사용할 수 있습니다.
예를 들면 :
SELECT * FROM suppliers WHERE supplier_name LIKE 'H%!_' escape '!';
이 SQL LIKE 조건의 예는 이름이 H로 시작하고 끝 _ 모든 공급 업체를 반환합니다. 예를 들어, 같은 'Hello_'로 값을 반환합니다.
참고 : SQL / 같은
-
==============================
5.
Select * from table where name like search_criteria
당신은 자신의 와일드 카드를 추가 할 수있는 사용자를 기대하는 경우 ...
-
==============================
6.당신은 그것을 탈출해야합니다 많은 데이터베이스에이, 백 슬래시를 앞에 \ %를하여 수행됩니다.
당신은 그것을 탈출해야합니다 많은 데이터베이스에이, 백 슬래시를 앞에 \ %를하여 수행됩니다.
ABC는 ABC \ %가되도록.
귀하의 프로그래밍 언어는 당신이 할 수있는 데이타베이스 고유의 기능을해야합니다. 예를 들어, PHP는 MySQL 데이터베이스에 대한 mysql_escape_string ()를 가지고있다.
-
==============================
7.그것은 당신의 비교 값의 일부로 만들기 위해 퍼센트 기호 \ %를 탈출.
그것은 당신의 비교 값의 일부로 만들기 위해 퍼센트 기호 \ %를 탈출.
-
==============================
8.이 하나의 도움이 될 수 있습니다 :
이 하나의 도움이 될 수 있습니다 :
DECLARE @SearchCriteria VARCHAR(25) SET @SearchCriteria = 'employee' IF CHARINDEX('%', @SearchCriteria) = 0 BEGIN SET @SearchCriteria = '%' + @SearchCriteria + '%' END SELECT * FROM Employee WHERE Name LIKE @SearchCriteria
from https://stackoverflow.com/questions/10803489/sql-like-query-using-where-the-search-criteria-contains by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 왜 오라클 SQL은 우리가 GROUP BY 절에 열 별칭을 사용하는 것을 허용하지 않습니다? (0) | 2020.06.07 |
---|---|
[SQL] MySQL의 와일드 카드 * 및 % (0) | 2020.06.07 |
[SQL] 또 다른 하나의 데이터베이스에서 MySQL을 삽입] (0) | 2020.06.07 |
[SQL] 첫 번째 문자로 그룹 (0) | 2020.06.07 |
[SQL] MySQL은 "LIMIT 1"을 사용하여 어느 시점이 있습니까 색인 / 고유의 필드에 쿼리 할 때? (0) | 2020.06.07 |