sql / LIKE '%_T' 는 _T로 끝나는 데이터만 찾지 않는다.

flobeeee·2021년 8월 16일
0

시행착오

목록 보기
20/43

문제상황

나는 당연하게 LIKE '%t' 같은 sql을 쓰면,
소문자 t로끝나는 데이터만 가져올 줄 알았다.
그러나 아니었다 ! 대문자 T로 끝나는 데이터도 가져왔다.

내가 원했던 쿼리는 특정 문자로 끝나는 데이터를 제외하는 것이었다.
예를들어 나는 20번 데이터인 tes_T처럼 _T로 끝나는 데이터를 제외하고 싶었다.
그런데 실제로는 16번, 20번, 21번 데이터가 모두 제외되었다.
아래 캡쳐로 확인할 수 있다.

해결방안 1

대소문자 구분해서 쿼리날리기

BINARY 키워드를 활용하면 된다.


소문자 t로 끝나는 데이터만 검색했고, 실제로 대문자 T로 끝나는 데이터는 제외되었다.


대문자 T로 끝나는 데이터만 검색했고, 실제로 T로 끝나는 데이터만 출력됐다.

해결방안 2

하단바 검색하기

하단바가 검색이 되지 않는 이유는 해당 키워드는 다른 역할을 하기 때문이다.
WHERE CustomerName LIKE 'a_%'
-> Finds any values that start with "a" and are at least 2 characters in length
a로 시작하고 적어도 두글자 이상의 글자를 찾는다.

WHERE CustomerName LIKE 'a__%'
-> Finds any values that start with "a" and are at least 3 characters in length
a로 시작하고 적어도 세글자 이상의 글자를 찾는다.

( 출처 : https://www.w3schools.com/sql/sql_like.asp )

binary를 제외하고 검색해봤다. 소문자 대문자 상관없이 두글자 이상의 t로 끝나는 결과가 출력된다.

탈출문자를 명시해줘서 하단바가 들어간 데이터를 찾아낼 수 있다.

후기

애초에 잘못된 쿼리를 날리고 있는지도 모르고, 그냥 넘어갈 뻔했다.
정말 치명적이라고 생각한다.
다양한 케이스를 생각해내서, 다시는 이런실수를 하지 말아야겠다고 생각했다.

profile
기록하는 백엔드 개발자

0개의 댓글