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

MySQL 정규식(REGEXP)으로 알파벳 대소문자와 숫자를 모두 포함하는 문자열 찾기

개요

MySQL에서 소문자(a-z), 대문자(A-Z), 숫자(0-9)를 모두 포함하는 문자열을 검색하려면 REGEXPBINARY 키워드를 함께 사용하고, 각 조건을 AND 연산자로 연결하면 됩니다.

BINARY를 사용하는 이유는 기본적으로 MySQL의 문자열 비교가 대소문자를 구분하지 않기 때문입니다. BINARY를 붙이면 대소문자를 엄격하게 구분하여 정확한 패턴 매칭이 가능합니다.

예제 테이블 생성

먼저 예제로 사용할 테이블을 생성합니다.

mysql> create table DemoTable738 (UserId varchar(100));
Query OK, 0 rows affected (0.81 sec)

데이터 삽입

INSERT 문을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable738 values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable738 values('sAm456');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable738 values('98Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable738 values('67david');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable738 values('69MIKE');
Query OK, 1 row affected (0.18 sec)

전체 데이터 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable738;

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

+---------+
| UserId |
+---------+
| John |
| sAm456 |
| 98Carol |
| 67david |
| 69MIKE |
+---------+
5 rows in set (0.00 sec)

REGEXP를 활용한 문자열 검색 쿼리

대소문자와 숫자를 모두 포함하는 문자열을 찾는 쿼리는 다음과 같습니다.

mysql> select *from DemoTable738 where UserId REGEXP BINARY '[A-Z]' 
and UserId REGEXP BINARY '[a-z]' and UserId REGEXP BINARY '[0-9]';

위 쿼리의 실행 결과는 다음과 같습니다.

+---------+
| UserId |
+---------+
| sAm456 |
| 98Carol |
+---------+
2 rows in set (0.03 sec)

결과 분석

쿼리 결과를 보면 'sAm456''98Carol' 두 건만 반환되었습니다. 이 두 값은 대문자, 소문자, 숫자를 모두 포함하기 때문입니다.

  • John: 영문자만 포함되어 제외됨
  • sAm456: 대문자(A), 소문자(s, m), 숫자(456)가 모두 있어 해당됨
  • 98Carol: 대문자(C), 소문자(arol), 숫자(98)가 모두 있어 해당됨
  • 67david: 대문자가 없어 제외됨
  • 69MIKE: 소문자가 없어 제외됨

이처럼 여러 개의 REGEXP BINARY 조건을 AND로 결합하면 복잡한 패턴 조건도 손쉽게 구현할 수 있습니다.