이 쿼리를 사용하여 PDF 설명서를 찾아야합니다.
root@localhost:test> select * from a where name like '%taz_manual%.pdf%';
+--------------------+------------------+-------------+
| name | description | size |
+--------------------+------------------+-------------+
| taz-manual-1.1.pdf | Manual v1.0 TA-Z | 31351902 |
| taz-manual-0.2.pdf | Manual v1.0 T1-A | 3578278 |
| taz_manual-2.0.pdf | Manual v2.0 GA-X | 542578278 |
etc........
+--------------------+------------------+-------------+
132 row in set (0.00 sec)
이름을 지정할 때 대시가있는 항목이 표시되는 이유는 무엇 taz_manual%.pdf
입니까?
답변
밑줄 _
은 %
하나의 문자 만 찾는 것을 제외하고 는 percent와 같은 와일드 카드 이기 때문입니다.
SQL 패턴 일치를 사용하면 “_”를 사용하여 단일 문자를 일치시키고 “%”를 사용하여 임의의 문자 수 (0 개 문자 포함)를 일치시킬 수 있습니다.
(섹션 3.3.4.7. MySQL 문서의 패턴 매칭 .)
밑줄을 like
리터럴로 사용하려면 이스케이프해야합니다.
select * from a where name like '%taz\_manual%.pdf%';
답변
정확히 일치하는 문자열을 일치시키는 동안 공백과 하이픈과 비슷한 문제가 발생했습니다.
SELECT id FROM location WHERE name = 'IND - HQ';
위 쿼리는 MySQL에서 어떤 레코드도 반환하지 않았습니다. 공백과 하이픈을 이스케이프하고 LIKE
다음과 같이 등호 (=)와 정확히 일치 하는 대신 사용해야 했습니다.
SELECT id FROM location WHERE name LIKE 'IND_\-_HQ';