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

MySQL에서 첫 글자가 영숫자가 아닌 행 조회하기 – REGEXP 정규식 활용 방법

MySQL에서 특정 컬럼의 첫 번째 문자가 영숫자(alphanumeric)가 아닌 행을 조회해야 하는 경우, REGEXP 연산자와 정규 표현식을 사용하면 손쉽게 처리할 수 있습니다. 상황별로 자주 사용되는 두 가지 패턴을 예제와 함께 살펴보겠습니다.

1. 기본 쿼리 패턴

Case 1. 첫 문자가 숫자인 행 조회

첫 글자가 숫자(0~9)로 시작하는 행만 가져오려면 아래 구문을 사용합니다.

SELECT * FROM yourTableName
WHERE yourColumnName REGEXP '^[0-9]';

Case 2. 첫 문자가 영숫자가 아닌 행 조회

첫 글자가 영숫자(0~9, A~Z, a~z)가 아닌 문자, 즉 특수문자(@, #, $ 등)로 시작하는 행을 가져오려면 다음 구문을 사용합니다.

SELECT * FROM yourTableName
WHERE yourColumnName REGEXP '^[^0-9A-Za-z]';

여기서 패턴 맨 앞의 ^(캐럿)는 "문자열의 시작"을 의미하고, 대괄호 [...] 안의 ^는 부정(not)을 뜻합니다. 따라서 '^[^0-9A-Za-z]'는 "첫 문자가 영숫자 범위에 포함되지 않는 경우", 즉 특수문자로 시작하는 값에 일치합니다.

2. 예제 테이블 준비

실제 동작을 확인하기 위해 테스트용 테이블을 생성합니다.

mysql> create table getRowsFirstNotAlphanumeric
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> UserPassword varchar(20),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.61 sec)

INSERT 문을 이용해 샘플 데이터를 입력합니다.

mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('@123456');
Query OK, 1 row affected (0.19 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('#7666666');
Query OK, 1 row affected (0.22 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('98876Carol');
Query OK, 1 row affected (0.16 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('$12345Carol');
Query OK, 1 row affected (0.09 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('%David567');
Query OK, 1 row affected (0.10 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('123456Larry');
Query OK, 1 row affected (0.07 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('909Robert');
Query OK, 1 row affected (0.12 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('3333Maxwell');
Query OK, 1 row affected (0.09 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('_123456Bob');
Query OK, 1 row affected (0.10 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('5767676Chris');
Query OK, 1 row affected (0.10 sec)
mysql> insert into getRowsFirstNotAlphanumeric(UserPassword) values('(88883Mike');
Query OK, 1 row affected (0.11 sec)

저장된 전체 데이터를 SELECT 문으로 확인해 보겠습니다.

mysql> select *from getRowsFirstNotAlphanumeric;

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

+----+--------------+
| Id | UserPassword |
+----+--------------+
|  1 | @123456      |
|  2 | #7666666     |
|  3 | 98876Carol   |
|  4 | $12345Carol  |
|  5 | %David567    |
|  6 | 123456Larry  |
|  7 | 909Robert    |
|  8 | 3333Maxwell  |
|  9 | _123456Bob   |
| 10 | 5767676Chris |
| 11 | (88883Mike   |
+----+--------------+
11 rows in set (0.00 sec)

3. 쿼리 실행 결과 확인

Case 1. 숫자로 시작하는 행 조회 결과

mysql> SELECT *FROM getRowsFirstNotAlphanumeric
    -> WHERE UserPassword REGEXP '^[0-9]';

실행 결과:

+----+--------------+
| Id | UserPassword |
+----+--------------+
|  3 | 98876Carol   |
|  6 | 123456Larry  |
|  7 | 909Robert    |
|  8 | 3333Maxwell  |
| 10 | 5767676Chris |
+----+--------------+
5 rows in set (0.00 sec)

Case 2. 영숫자가 아닌 문자로 시작하는 행 조회 결과

mysql> SELECT *FROM getRowsFirstNotAlphanumeric
    -> WHERE UserPassword REGEXP '^[^0-9A-Za-z]';

실행 결과:

+----+--------------+
| Id | UserPassword |
+----+--------------+
|  1 | @123456      |
|  2 | #7666666     |
|  4 | $12345Carol  |
|  5 | %David567    |
|  9 | _123456Bob   |
| 11 | (88883Mike   |
+----+--------------+
6 rows in set (0.00 sec)

4. 마무리

이처럼 MySQL에서는 REGEXP 연산자와 캐럿(^) 기호를 조합하면 문자열의 시작 위치를 기준으로 원하는 패턴의 행을 간편하게 필터링할 수 있습니다. 숫자로 시작하는 데이터와 특수문자로 시작하는 데이터를 분리해 처리해야 하는 데이터 검증, 비밀번호 규칙 점검 등의 작업에 실무적으로 유용하게 활용할 수 있습니다.