복붙노트

[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. ==============================

    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. ==============================

    2.밑줄은 하나 개의 임의의 문자에 대한 LIKE 쿼리에서 와일드 카드입니다.

    밑줄은 하나 개의 임의의 문자에 대한 LIKE 쿼리에서 와일드 카드입니다.

    따라서 LIKE %가 _ % 수단 "이 열의 적어도 하나 개의 임의의 문자 나 모든 레코드를 제공".

    당신은 [] 주위와 SQL 서버에서 와일드 카드 문자를 탈출해야 :

    SELECT m.* 
    FROM Manager m 
    WHERE m.managerid    LIKE  '[_]%'
    AND   m.managername  LIKE '%[_]%'
    

    참조 : LIKE를 (Transact-SQL)를 참조하십시오

    데모

  3. ==============================

    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. ==============================

    4.밑줄은 무엇인가에 대한 와일드 카드입니다. 예를 들면 'A %'경기를 찾습니다 그 시작 'A'와 그 후 최소 1 개 개의 여분의 문자가

    밑줄은 무엇인가에 대한 와일드 카드입니다. 예를 들면 'A %'경기를 찾습니다 그 시작 'A'와 그 후 최소 1 개 개의 여분의 문자가

  5. 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