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

MySQL REGEXP BINARY로 대문자가 포함된 데이터 조회하는 방법

MySQL에서 정규식으로 대문자 찾기

MySQL에서 특정 컬럼에 대문자가 포함된 데이터를 검색하려면 REGEXP BINARY 연산자를 사용하면 됩니다. 기본적인 문법은 다음과 같습니다.

SELECT * FROM yourTableName
WHERE yourColumnName REGEXP BINARY '[A-Z]{2}';

여기서 BINARY 키워드는 매우 중요합니다. MySQL의 문자열 비교는 기본적으로 대소문자를 구분하지 않기 때문에, BINARY를 붙이지 않으면 소문자도 함께 매칭될 수 있습니다. BINARY를 지정하면 바이너리(대소문자 구분) 방식으로 비교하여 정확히 대문자만 찾아냅니다.

위 쿼리에서 [A-Z]{2}는 '연속된 두 개 이상의 대문자'를 의미합니다. 만약 대문자가 하나라도 포함되어 있는지 확인하고 싶다면 [A-Z] 또는 [A-Z]+로 패턴을 변경하면 됩니다.

예제 테이블 생성하기

실습을 위해 먼저 테이블을 생성해 보겠습니다.

mysql> CREATE TABLE FindCapitalLettrsDemo (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentFirstName varchar(20)
-> );
Query OK, 0 rows affected (0.52 sec)

샘플 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('JOHN');
Query OK, 1 row affected (0.24 sec)
mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('bob');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('carol');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO FindCapitalLettrsDemo(StudentFirstName) VALUES('John');
Query OK, 1 row affected (0.14 sec)

전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> SELECT * FROM FindCapitalLettrsDemo;

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

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1 | JOHN |
| 2 | Carol |
| 3 | bob |
| 4 | carol |
| 5 | John |
+-----------+------------------+
5 rows in set (0.00 sec)

REGEXP BINARY로 대문자 검색 실행

이제 대문자가 포함된 이름을 찾는 쿼리를 실행해 보겠습니다.

mysql> SELECT * FROM FindCapitalLettrsDemo
-> WHERE StudentFirstName REGEXP BINARY '[A-Z]{2}';

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

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1 | JOHN |
+-----------+------------------+
1 row in set (0.14 sec)

결과 분석 및 참고 사항

결과를 보면 'JOHN'만 반환된 것을 확인할 수 있습니다. 'Carol'과 'John'은 첫 글자에 대문자가 하나씩 있지만, 패턴 [A-Z]{2}가 '연속된 두 개 이상의 대문자'를 요구하기 때문에 제외되었습니다.

만약 대문자가 한 개라도 포함된 모든 행을 찾고 싶다면 아래와 같이 쿼리를 수정하세요.

mysql> SELECT * FROM FindCapitalLettrsDemo
-> WHERE StudentFirstName REGEXP BINARY '[A-Z]';

이 경우 'JOHN', 'Carol', 'John' 세 개의 행이 모두 반환됩니다. 이처럼 REGEXP BINARY와 정규식 패턴을 조합하면 대소문자 구분 검색을 자유롭게 활용할 수 있습니다.