도리안의 개발 이야기 #187 - 언더바(_)가 들어간 아이디를 찾는 쿼리 만들 때 주의할 점

in #zzan5 years ago



대문 제작: imrahelk

현재 운영 중인 서비스에서 아이디는 메일 계정이기도 합니다. 그런데 메일주소에는 바(-)나 언더바(_)가 들어있기도 하죠. 한 사용자가 언더바가 들어간 메일 계정을 사용하길 원한다는 클레임이 있었고, 이를 반영하기로 했습니다. 그런데요... 데이터베이스를 담당하는 이사님께서 주의해야 할 점을 말씀해 주셨습니다. LIKE 문이 들어간 SELECT 문을 작성할 때 주의점이 있다는 것입니다.

예를 들어 'abc_'로 시작하는 계정을 찾고 싶다면, 아래와 같은 쿼리를 만드는 실수를 할 수 있습니다.

SELECT userID
FROM User
WHERE userID LIKE 'abc_%';

그러나 위 쿼리로 'abc_'로 시작하는 계정을 찾을 수 없습니다. 왜냐하면 LIKE 연산자를 사용할 때, 우측 피연산자에서 와 %는 특수한 의미를 갖기 때문입니다. 전자는 하나의 글자를 의미하고요. 후자는 0개 이상의 글자를 의미합니다. 'abc%'에 부합하는 문자열들의 예는 다음과 같습니다.

  • abca
  • abcb
  • abc1
  • abc_
  • ...

'abc_'로 시작하는 계정을 찾고 싶다면, userID LIKE 'abc_%'라는 식은 틀린 것입니다. 위 쿼리는 다음과 같이 수정해야 합니다.

abc_로 시작하는 계정을 찾는 쿼리

SELECT userID
FROM User
WHERE userID LIKE 'abc/_%' ESCAPE '/';

LIKE 문의 오른쪽 문자열에 이스케이프 문자가 들어갔습니다. 이게 무슨 의미인지는 찾아서 공부해야 합니다.

aaronhong_banner.jpg

Sort:  

오오 그렇군요 / 를 붙여야하는군요

저도 새롭게 알게 된 내용이죠. 배워야 할 거는 끝이 없어요.. ㅠㅠ

Coin Marketplace

STEEM 0.32
TRX 0.11
JST 0.034
BTC 66384.36
ETH 3272.25
USDT 1.00
SBD 4.27