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

MySQL REGEXP로 특정 단어 수를 가진 레코드만 조회하는 방법

컬럼 값이 정확히 지정한 개수의 단어로만 이루어진 레코드를 조회하려면 MySQL에서 정규 표현식(REGEXP)을 활용하면 됩니다. 기본 문법은 다음과 같습니다.

SELECT * FROM yourTableName
WHERE yourColumnName REGEXP '^[^ ]+[ ]+[^ ]+$';

위 쿼리는 두 단어가 공백 하나로 구분된 경우에만 매칭됩니다. 정규 표현식의 각 요소를 살펴보면 다음과 같습니다.

  • ^ : 문자열의 시작을 의미합니다.
  • [^ ]+ : 공백이 아닌 문자, 즉 첫 번째 단어가 하나 이상 존재해야 합니다.
  • [ ]+ : 단어 사이에 공백이 하나 이상 있어야 합니다.
  • [^ ]+$ : 두 번째 단어로 문자열이 끝나야 함을 나타냅니다.

예제 테이블 생성

실제 동작을 확인하기 위해 먼저 테이블을 생성해 보겠습니다.

mysql> CREATE TABLE DemoTable1412 (
-> Name VARCHAR(40)
-> );
Query OK, 0 rows affected (0.52 sec)

레코드 삽입

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

mysql> INSERT INTO DemoTable1412 VALUES('John Adam Carol');
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO DemoTable1412 VALUES('Mike Sam');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable1412 VALUES('Chris James Robert');
Query OK, 1 row affected (0.15 sec)

전체 레코드 조회

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

mysql> SELECT * FROM DemoTable1412;

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

+--------------------+
| Name |
+--------------------+
| John Adam Carol |
| Mike Sam |
| Chris James Robert |
+--------------------+
3 rows in set (0.00 sec)

REGEXP로 두 단어 레코드만 조회하기

이제 정규 표현식을 적용해 "공백으로 구분된 두 단어"로만 이루어진 행을 조회하는 쿼리입니다.

mysql> SELECT * FROM DemoTable1412
-> WHERE Name REGEXP '^[^ ]+[ ]+[^ ]+$';

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

+----------+
| Name |
+----------+
| Mike Sam |
+----------+
1 row in set (0.00 sec)

결과를 보면 세 단어로 구성된 'John Adam Carol'과 'Chris James Robert'는 제외되고, 정확히 두 단어로만 이루어진 'Mike Sam'만 조회된 것을 확인할 수 있습니다. 이처럼 REGEXP 패턴에서 단어와 공백의 반복 횟수를 조절하면 원하는 단어 수를 가진 레코드만 손쉽게 필터링할 수 있습니다.