LIKE
조건 과 함께 아래 SQL 쿼리를 작성했습니다 .
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');
답변
다음 WHERE
과 같이 조건을 수정하십시오 .
WHERE mycolumn LIKE '%\_%' ESCAPE '\'
이것은 Oracle이 이스케이프 문자를 지원하는 방법 중 하나입니다. 여기서 escape
키워드로 이스케이프 문자를 정의합니다 . 자세한 내용은 Oracle Docs의이 링크 를 참조하십시오 .
'_'
및 '%'
A의 와일드 카드입니다 LIKE
SQL에서 운영하는 문.
_
문자 (모든) 하나 개의 캐릭터의 존재를 찾습니다. 당신이로 검색하는 경우 columnName LIKE '_abc'
, 그것은 당신이 행을 갖는 결과를 줄 것이다 'aabc'
, 'xabc'
, '1abc'
, '#abc'
하지만 'abc'
, 'abcc'
, 'xabcd'
등등.
이 '%'
문자는 0 개 이상의 문자를 일치시키는 데 사용됩니다. 당신이로 검색하면 그 말은 columnName LIKE '%abc'
, 그것이 갖는 당신이 결과를 줄 것이다 'abc'
, 'aabc'
, 'xyzabc'
등,하지만 'xyzabcd'
, 'xabcdd'
로 끝하지 않는 다른 문자열 'abc'
.
귀하의 경우에는 '%_%'
. 이렇게하면 해당 열에 하나 이상의 문자가있는 모든 행, 즉 모든 문자가 값으로 제공됩니다. 이것이 _
열 값에 없는 경우에도 모든 행을 가져 오는 이유 입니다.
답변
밑줄은 임의의 문자 하나 에 대한LIKE
쿼리 의 와일드 카드입니다 .
따라서 LIKE %_%
“이 열에 하나 이상의 임의 문자가있는 모든 레코드를 제공하십시오”를 의미합니다.
sql-server에서 다음과 같이 와일드 카드 문자를 이스케이프해야합니다 []
.
SELECT m.*
FROM Manager m
WHERE m.managerid LIKE '[_]%'
AND m.managername LIKE '%[_]%'
참조 : LIKE (Transact-SQL)
답변
와일드 카드 문자를 구체적으로 검색하려면 이스케이프해야합니다.
표현식에 ESCAPE
절을 추가하면 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
답변
밑줄은 무언가에 대한 와일드 카드입니다. 예를 들어 ‘A_ %’는 Start whit ‘A’와 일치하는 모든 일치 항목을 찾고 그 뒤에 최소 1 개의 추가 문자가 있습니다.
답변
다음과 같이 쿼리를 작성할 수 있습니다.
SELECT * FROM Manager
WHERE managerid LIKE '\_%' escape '\'
AND managername LIKE '%\_%' escape '\';
그것은 당신의 문제를 해결할 것입니다.
답변
사람들이 BigQuery에서 방법을 검색하는 경우 :
-
밑줄 “_”은 단일 문자 또는 바이트와 일치합니다.
-
두 개의 백 슬래시를 사용하여 “\”, “_”또는 “%”를 이스케이프 할 수 있습니다. 예 : “\ %”. 원시 문자열을 사용하는 경우 단일 백 슬래시 만 필요합니다. 예 : r “\ %”.
WHERE mycolumn LIKE '%\\_%'
출처 : https://cloud.google.com/bigquery/docs/reference/standard-sql/operators