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

MySQL에서 특정 행에 두 단어만 포함되어 있는지 확인하는 방법

MySQL에서 특정 행(레코드)에 두 단어만 포함되어 있는지 확인하려면 정규 표현식(Regular Expression)을 활용하면 됩니다. 아래와 같은 구문을 사용하세요.

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)

두 단어만 있는 행 조회하기

이제 공백으로 구분된 두 단어만 포함된 행을 확인하는 쿼리입니다.

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'만 조회된 것을 확인할 수 있습니다.

참고 사항

MySQL 8.0부터는 REGEXP 연산자가 ICU(International Components for Unicode) 라이브러리 기반으로 동작하므로 유니코드 문자열에서도 안정적으로 사용할 수 있습니다. 만약 탭(tab)이나 여러 개의 공백 등 다양한 공백 문자를 처리해야 한다면 [[:space:]]+ 패턴을 사용하는 것이 더 안전합니다.