Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 대문자가 포함된 필드만 조회하는 방법 – RLIKE 패턴 매칭 활용하기

MySQL에서 문자열에 대문자(A~Z)가 하나라도 포함된 레코드만 조회하고 싶다면, 정규 표현식 기반의 패턴 매칭 연산자인 RLIKE를 사용하면 됩니다. 다만 MySQL은 기본적으로 대소문자를 구분하지 않는(Case-insensitive) 비교를 수행하기 때문에, 단순히 RLIKE '[A-Z]'만 사용하면 소문자도 함께 매칭될 수 있습니다.

이 문제를 해결하려면 CAST(... AS BINARY)로 컬럼을 이진(binary) 형식으로 변환한 뒤 패턴 매칭을 적용해야 정확한 결과를 얻을 수 있습니다. 아래에서 예제와 함께 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 실습용 테이블을 만들어 보겠습니다.

mysql> CREATE TABLE contains_capital_letterDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name varchar(100)
    -> );
Query OK, 0 rows affected (1.42 sec)

2. 테스트 데이터 삽입

대소문자가 섞인 이름 데이터를 몇 개 입력합니다.

mysql> INSERT INTO contains_capital_letterDemo(Name) VALUES('Larry');
Query OK, 1 row affected (0.17 sec)

mysql> INSERT INTO contains_capital_letterDemo(Name) VALUES('larry');
Query OK, 1 row affected (0.12 sec)

mysql> INSERT INTO contains_capital_letterDemo(Name) VALUES('john');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO contains_capital_letterDemo(Name) VALUES('JOHN');
Query OK, 1 row affected (0.36 sec)

mysql> INSERT INTO contains_capital_letterDemo(Name) VALUES('mike');
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO contains_capital_letterDemo(Name) VALUES('Mike');
Query OK, 1 row affected (0.27 sec)

3. 전체 데이터 확인

SELECT 문으로 저장된 모든 레코드를 조회해 보겠습니다.

mysql> SELECT * FROM contains_capital_letterDemo;

실행 결과는 다음과 같습니다.

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Larry |
| 2  | larry |
| 3  | john  |
| 4  | JOHN  |
| 5  | mike  |
| 6  | Mike  |
+----+-------+
6 rows in set (0.00 sec)

4. 대문자가 포함된 필드만 조회하는 쿼리

핵심 쿼리입니다. CAST(Name AS BINARY)로 값을 이진 문자열로 변환한 후, RLIKE '[A-Z]' 패턴으로 대문자 존재 여부를 검사합니다.

mysql> SELECT * FROM contains_capital_letterDemo
    WHERE CAST(Name AS BINARY) RLIKE '[A-Z]';

실행 결과는 다음과 같습니다.

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Larry |
| 4  | JOHN  |
| 6  | Mike  |
+----+-------+
3 rows in set (0.00 sec)

결과 분석 및 핵심 포인트

  • Larry, JOHN, Mike처럼 대문자가 하나라도 포함된 레코드만 반환되었습니다.
  • larry, john, mike처럼 완전히 소문자로만 구성된 값은 제외됩니다.
  • CAST(컬럼명 AS BINARY)를 반드시 함께 사용하세요. 이진 변환 없이 실행하면 MySQL의 기본 콜레이션(case-insensitive) 특성 때문에 의도한 대소문자 구분이 되지 않습니다.
  • 참고로 RLIKEREGEXP와 동일하게 동작하는 연산자이며, MySQL 8.0부터는 ICU(International Components for Unicode) 라이브러리 기반의 정규 표현식 엔진을 사용합니다.

마무리

이처럼 RLIKEBINARY 변환을 조합하면 대소문자 구분 검색을 간단하게 구현할 수 있습니다. 반대로 소문자만 포함된 필드를 찾으려면 RLIKE '^[a-z]+$' 같은 패턴을 응용하면 되며, 숫자나 특정 문자 조합 검색 등 다양한 조건에도 확장하여 활용할 수 있습니다.