programing

LIKE 필터에 밑줄 문자를 사용하면 모든 결과가 나타나는 이유는 무엇입니까?

iphone6s 2023. 4. 7. 21:01
반응형

LIKE 필터에 밑줄 문자를 사용하면 모든 결과가 나타나는 이유는 무엇입니까?

를 SQL로 작성했습니다.LIKE★★★★

SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'

서서 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-Fiddle

<고객명>님의 WHERE다음과 같이 합니다.

WHERE mycolumn LIKE '%\_%' ESCAPE '\'

이는 Oracle이 이스케이프 문자를 지원하는 방법 중 하나입니다.를 '스케이프'로 합니다.escape키워드를 지정합니다.자세한 내용은 Oracle Docs에서 이 링크를 참조하십시오.

'_' ★★★★★★★★★★★★★★★★★」'%' are are の are 。LIKEoperated 의 operated .

_ 문자.문자 「」, 「1」의합니다.「 」로 하면,columnName LIKE '_abc' 하다, , 하다, 하다, 하다, 하다, 하다 행으로 결과를 수 'aabc','xabc','1abc','#abc' 아니다'abc','abcc','xabcd'기타 등등.

'%'는 0 할 때 수는 0 입니다. ,로 하면 음음 by음 that that 、 음 、 음 、 음 、 。columnName LIKE '%abc' 이렇게 해서 결과가 'abc','aabc','xyzabc' 등등, 아니다, 아니다'xyzabcd','xabcdd' ""로 않는 기타 문자열'abc'.

에는 ''로 요.'%_%'그러면 해당 열의 모든 행에 1개 이상의 문자(즉, 임의의 문자)가 값으로 지정됩니다.에 줄 도 줄 거죠._열 값을 입력합니다.

밑줄은 쿼리의 와일드카드이며, 1개의 임의의 문자를 나타냅니다.

때문에, 「 」는 할 수 없습니다.LIKE %_%는 "이 열에 임의의 문자가 하나 이상 포함된 모든 레코드를 주세요"를 의미합니다.

.[]★★★★

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

참조: LIKE (Transact-SQL)

Demo

와일드카드 문자를 특히 검색하려면 , 그 문자를 이스케이프 할 필요가 있습니다.

해서 할 수 요.ESCAPE을 의 절LIKE「」. 「」로 되어 있는 .ESCAPE절은 다음 와일드카드 문자를 "인증"합니다.

임의의 문자를 사용할 수 있습니다( 와일드카드 문자는 사용할 수 없습니다).은 부부 a a a를 한다.\은 많은 언어들도 사용하는이기 때문이다.

따라서 쿼리 결과는 다음과 같습니다.

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

밑줄은 무언가에 대한 와일드카드입니다.예를 들어 'A_%'는 'A'에서 시작하는 모든 일치 항목을 찾고 그 뒤에 최소 1개의 추가 문자가 있습니다.

BigQuery에서 방법을 검색하는 경우:

  • 밑줄 "_"는 단일 문자 또는 바이트와 일치합니다.

  • 두 개의 백슬래시를 사용하여 "\", "_" 또는 "%"를 이스케이프할 수 있습니다.예를 들어 "\%"와 같이 입력합니다.raw 문자열을 사용하는 경우 백슬래시는 1개만 필요합니다.예를 들어 r"\% 입니다.

WHERE mycolumn LIKE '%\\_%'

출처 : https://cloud.google.com/bigquery/docs/reference/standard-sql/operators

다음과 같이 쿼리를 작성할 수 있습니다.

SELECT * FROM Manager
WHERE managerid LIKE '\_%' escape '\'
AND managername LIKE '%\_%' escape '\';

당신의 문제를 해결해 줄 것입니다.

언급URL : https://stackoverflow.com/questions/19588455/why-does-using-an-underscore-character-in-a-like-filter-give-me-all-the-results

반응형