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

MySQL 문자열에서 밑줄(_) 포함 여부 확인하는 방법

MySQL에서 문자열에 포함된 밑줄(underscore, _)을 찾으려면 LIKE 연산자와 이스케이프 문자를 함께 사용하면 됩니다. 밑줄은 SQL의 LIKE 패턴에서 '임의의 한 문자'를 의미하는 와일드카드로 해석되기 때문에, 일반적인 백슬래시(\)로 이스케이프 처리해야 실제 밑줄 문자와 일치시킬 수 있습니다.

기본 문법

SELECT * FROM yourTableName WHERE yourColumnName LIKE '%\_%';

예제 테이블 생성

먼저 예제로 사용할 테이블을 생성해 보겠습니다.

mysql> CREATE TABLE DemoTable
(
    ClientId varchar(200)
);
Query OK, 0 rows affected (0.79 sec)

다음으로 INSERT 명령어를 사용해 몇 개의 레코드를 삽입합니다. 밑줄이 앞에 있는 경우, 뒤에 있는 경우, 아예 없는 경우 등 다양한 형태의 데이터를 넣어보겠습니다.

mysql> INSERT INTO DemoTable VALUES('CLI_101');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES('CLI1110');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES('_CLI102');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('CLI103_');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('CLI1111');
Query OK, 1 row affected (0.16 sec)

전체 데이터 조회

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

mysql> SELECT * FROM DemoTable;

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

+----------+
| ClientId |
+----------+
| CLI_101  |
| CLI1110  |
| _CLI102  |
| CLI103_  |
| CLI1111  |
+----------+
5 rows in set (0.00 sec)

LIKE 연산자로 밑줄 매칭하기

이제 LIKE '%\_%' 패턴을 사용해 밑줄이 포함된 문자열만 조회하는 쿼리입니다.

mysql> SELECT * FROM DemoTable WHERE ClientId LIKE '%\_%';

밑줄이 포함된 문자열만 정상적으로 출력되는 것을 확인할 수 있습니다.

+----------+
| ClientId |
+----------+
| CLI_101  |
| _CLI102  |
| CLI103_  |
+----------+
3 rows in set (0.00 sec)

REGEXP를 사용한 대체 방법

LIKE 대신 정규표현식 함수인 REGEXP를 사용할 수도 있습니다. 정규표현식에서는 밑줄이 특별한 의미를 가지지 않으므로 이스케이프 처리가 필요 없다는 장점이 있습니다.

mysql> SELECT * FROM DemoTable WHERE ClientId REGEXP '_';

결과는 동일하게 밑줄이 포함된 3개의 행이 반환됩니다.

+----------+
| ClientId |
+----------+
| CLI_101  |
| _CLI102  |
| CLI103_  |
+----------+
3 rows in set (0.00 sec)

정리

- LIKE '%\_%': 백슬래시로 밑줄을 이스케이프해야 하며, SQL 모드나 설정에 따라 '%!_(ESCAPE '!')'처럼 ESCAPE 절로 다른 이스케이프 문자를 지정할 수도 있습니다.
- REGEXP '_': 별도의 이스케이프 없이 간단하게 사용 가능합니다.
- 두 방법 모두 밑줄이 문자열 어디에 위치하든(앞, 중간, 뒤) 정확히 매칭됩니다.