DEV/SQL
문자열 패턴 매칭 조건 | LIKE, %, _
devvnn
2022. 1. 2. 14:51
SELECT * FROM copang_main.member WHERE address LIKE '서울%';
- 주소가 서울인 회원들만 조회
- address의 컬럼값이 '서울%'인 것만 조회
- '서울%' -> 문자열의 첫 부분이 서울이라는 단어로 시작하고, 그 뒤에 임의의 길이를 가진 문자열이 있는 모든 문자열
SELECT * FROM copang_main.member WHERE address LIKE '%고양시%';
- '고양시'라는 단어 앞 뒤로 임의의 길이를 가진 문자열들이 있는 문자열
- 즉, '고양시'라는 단어가 포함된 모든 문자열을 조회
문자열 패턴 매칭 조건을 사용할 때 주의할 점
- LIKE : 문자열 패턴 매칭 조건을 걸기 위해 사용되는 키워드
- % : 임의의 길이를 가진 문자열(0자도 포함)
- _ : 한 자리의 문자
1. 이스케이핑(escaping) 문제
- %, ', _, " 와 같은 문자들은 ① 문자열이라는 것을 나타내거나, ② 문자열의 특정 패턴을 나타내는 표현식들임
- 예를들어 문자로서의 %(EX - For51%)를 검색하고자 한다면?
SELECT * FROM copang_main.test WHERE sentence LIKE '%\%%';
- 이렇게 역슬래쉬(백슬래쉬) 기호를 붙여주면 가운데 %가 문자로서의 %로 해석이 된다
- 특정의미를 나타내던 문자(%)를 그 특정 의미가 아니라, 일반적인 문자처럼 취급하는 행위가 이스케이핑
- '(작은따옴표) 이스케이핑? SELECT * FROM member WHERE sentence LIKE '%\'%'
- _(언더바) 이스케이핑? SELECT * FROM member WHERE sentence LIKE '%\_%'
- "(큰따옴표) 이스케이핑? SELECT * FROM member WHERE sentence LIKE '%\"%\"%'
2. 대소문자 구분 문제
- MySQL은 기본적으로 대문자, 소문자를 구분없이 조회함
- MySQL 설정에 관계없이 대소문자를 명확하게 구분하고 싶다면 LIKE 뒤에 BINARY를 붙일 것
- BINARY는 이진의, 0과 1로 된 이라는 뜻을 가지며 해당 0과 1이 정확히 일치하는 것을 찾으라는 뜻
- 만약 SELECT * FROM member WHERE senetence LIKE BINARY '%g%';라는 쿼리문은, BINARY가 붙어있기에 해당 0과 1이 정확히 일치하는 것을 찾으라는 의미를 가지며, 소문자 g와 대문자 G는 같은 알파벳이지만 컴퓨터에서 0과 1의 조합으로 저장될 때 다른 값으로 저장됨