개요
MySQL에서는 하나의 쿼리 안에서 LIKE 연산자와 CHAR_LENGTH() 함수를 동시에 사용할 수 있습니다. LIKE는 특정 패턴이 포함된 문자열을 검색할 때 사용되며, CHAR_LENGTH()는 문자열의 길이(문자 수)를 반환합니다. 이 두 가지를 조합하면 특정 단어가 포함된 레코드 중에서 길이 조건까지 만족하는 데이터만 정확하게 필터링할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.49 sec)
insert 명령을 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable values('Chris Brown');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Adam Smith');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John Smith');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Carol Smith');
Query OK, 1 row affected (0.13 sec)select 문으로 테이블의 전체 레코드를 확인해 보겠습니다.
mysql> select * from DemoTable;
실행 결과는 다음과 같습니다.
+-------------+
| Name |
+-------------+
| Chris Brown |
| Adam Smith |
| John Smith |
| Carol Smith |
+-------------+
4 rows in set (0.00 sec)
SELECT LIKE와 CHAR_LENGTH() 조합 쿼리
아래 쿼리는 이름에 'Smith'라는 문자열이 포함되면서, 동시에 전체 길이가 11자 미만인 레코드만 조회합니다.
mysql> select * from DemoTable
-> where Name LIKE '%Smith%'
-> and char_length(Name) < 11;
실행 결과는 다음과 같습니다.
+------------+
| Name |
+------------+
| Adam Smith |
| John Smith |
+------------+
2 rows in set (0.00 sec)
결과 분석
'Chris Brown'은 'Smith'를 포함하지 않기 때문에 LIKE 조건에서 제외되었고, 'Carol Smith'는 'Smith'를 포함하지만 길이가 정확히 11자이므로 char_length(Name) < 11 조건을 만족하지 못해 제외되었습니다. 그 결과, 길이가 10자인 'Adam Smith'와 'John Smith'만 최종적으로 반환됩니다.
이처럼 WHERE 절에서 AND 연산자로 여러 조건을 결합하면, 패턴 매칭과 문자열 길이 검사를 한 번의 쿼리로 처리할 수 있어 데이터 필터링 작업을 더욱 효율적으로 수행할 수 있습니다.