program tip

“_”(밑줄)이“-”(하이픈)과 일치하는 이유는 무엇입니까?

radiobox 2020. 7. 30. 10:18
반응형

“_”(밑줄)이“-”(하이픈)과 일치하는 이유는 무엇입니까?


이 쿼리를 사용하여 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';

참고 URL : https://stackoverflow.com/questions/8236818/why-does-underscore-match-hyphen

반응형