[SQL] 왜 LIKE 필터에 밑줄 문자를 사용하여 저 모두에게 결과를 제공합니까?
SQL왜 LIKE 필터에 밑줄 문자를 사용하여 저 모두에게 결과를 제공합니까?
나는 LIKE 조건으로 SQL 쿼리 아래를 썼다 :
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
등에 난 % % _ 어떤 밑줄을 검색하려면,하지만 난 내 컬럼의 데이터가 더 밑줄 문자가 없다는 것을 알고있다.
샘플 데이터 :
create table Manager(
id int
,managerid varchar(3)
,managername varchar(50)
);
insert into Manager(id,managerid,managername)values(1,'A1','Mangesh');
insert into Manager(id,managerid,managername)values(2,'A2','Sagar');
insert into Manager(id,managerid,managername)values(3,'C3','Ahmad');
insert into Manager(id,managerid,managername)values(4,'A4','Mango');
insert into Manager(id,managerid,managername)values(5,'B5','Sandesh');
SQL-바이올린
해결법
-
==============================
1.이 같은 수정하여 WHERE 조건 :
이 같은 수정하여 WHERE 조건 :
WHERE mycolumn LIKE '%\_%' ESCAPE '\'
이는 오라클이 지원하는 문자를 탈출하는 방법 중 하나입니다. 여기에서 탈출 키워드 이스케이프 문자를 정의합니다. 자세한 내용은 오라클 문서에이 링크를 참조하십시오.
'_'및 '%'는 LIKE 와일드 카드는 SQL에서 문을 운영한다.
(어떤) 하나 개의 캐릭터의 존재에 대한 _ 문자 보인다. 당신이 COLUMNNAME LIKE '_abc'로 검색하면, 당신이 행 'AABC', 'xabc', '1abc', '#abc'을 가지고 있지만, 'ABC', 'ABCC가', 'xabcd'및 NOT과 결과를 줄 것이다 등등 .
'%'문자는 문자의 0 개 이상의 번호를 일치시키기 위해 사용된다. 당신이 COLUMNNAME 등으로 검색하면 그 말은, '% ABC', 당신이 갖는 결과를 줄 것이다 'ABC', 'AABC', 'xyzabc'등등,하지만 'xyzabcd', 'xabcdd'과 다른 문자열이 와 'ABC'끝나지 않습니다.
귀하의 경우에는 당신은 '% _ %'로 검색했다. 이것은이 값으로 하나 이상의 문자 것을 의미 모든 문자를 갖는 열에서 모든 행들을 제공 할 것이다. 이것은 당신의 열 값에 더 _이 경우에도 모든 행을 받고되지 않습니다 이유입니다.
-
==============================
2.밑줄은 하나 개의 임의의 문자에 대한 LIKE 쿼리에서 와일드 카드입니다.
밑줄은 하나 개의 임의의 문자에 대한 LIKE 쿼리에서 와일드 카드입니다.
따라서 LIKE %가 _ % 수단 "이 열의 적어도 하나 개의 임의의 문자 나 모든 레코드를 제공".
당신은 [] 주위와 SQL 서버에서 와일드 카드 문자를 탈출해야 :
SELECT m.* FROM Manager m WHERE m.managerid LIKE '[_]%' AND m.managername LIKE '%[_]%'
참조 : LIKE를 (Transact-SQL)를 참조하십시오
데모
-
==============================
3.특별히 와일드 카드 문자를 검색 할로서 당신은 탈출 할 필요가
특별히 와일드 카드 문자를 검색 할로서 당신은 탈출 할 필요가
이것은 당신의 LIKE 식에 ESCAPE 절을 추가하여 수행됩니다. 이스케이프 절을 지정 문자는 "무효화"와일드 카드 문자를 다음과 같은 것입니다.
당신은 당신이 좋아하는 모든 문자 (그냥 와일드 카드 문자)를 사용할 수 있습니다. 그 또한 무엇을 많은 프로그래밍 언어를 사용하기 때문에 대부분의 사람들은 \를 사용
쿼리가 초래 그래서 :
select * from Manager where managerid LIKE '\_%' escape '\' and managername like '%\_%' escape '\';
하지만 당신은 단지뿐만 아니라 다른 문자를 사용할 수 있습니다 :
select * from Manager where managerid LIKE '#_%' escape '#' and managername like '%#_%' escape '#';
여기 SQLFiddle 예이다 : http://sqlfiddle.com/#!6/63e88/4
-
==============================
4.밑줄은 무엇인가에 대한 와일드 카드입니다. 예를 들면 'A %'경기를 찾습니다 그 시작 'A'와 그 후 최소 1 개 개의 여분의 문자가
밑줄은 무엇인가에 대한 와일드 카드입니다. 예를 들면 'A %'경기를 찾습니다 그 시작 'A'와 그 후 최소 1 개 개의 여분의 문자가
from https://stackoverflow.com/questions/19588455/why-does-using-an-underscore-character-in-a-like-filter-give-me-all-the-results by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 지난 몇 일 SELECT MYSQL? (0) | 2020.04.24 |
---|---|
[SQL] 방법은 하나 개 이상의 결과 하위 쿼리를 사용하여 테이블에 값을 삽입 할 수 있습니까? (0) | 2020.04.24 |
[SQL] 모든 필드는 NULL이 포함 된 경우 MySQL의 CONCAT는 NULL을 반환 (0) | 2020.04.24 |
[SQL] 하나 개의 값에 대해 여러 열을 확인 (0) | 2020.04.24 |
[SQL] 어떻게 SQL Server Management Studio를 가진 복합 키를해야합니까? (0) | 2020.04.24 |