MySQL에서 문자열 길이가 특정 값(X자)보다 짧은 레코드만 조회하고 싶다면 CHAR_LENGTH() 함수를 WHERE 절과 함께 사용하면 됩니다. CHAR_LENGTH()는 문자열의 글자 수를 반환하는 함수로, 이를 조건으로 활용해 원하는 길이의 데이터만 손쉽게 필터링할 수 있습니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
-> (
-> FullName varchar(50)
-> );
Query OK, 0 rows affected (1.75 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('Chris Brown');
Query OK, 1 row affected (0.40 sec)
mysql> insert into DemoTable values('David Miller');
Query OK, 1 row affected (0.91 sec)
mysql> insert into DemoTable values('Robert Miller');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable values('John Smith');
Query OK, 1 row affected (0.89 sec)3. 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+---------------+
| FullName |
+---------------+
| Chris Brown |
| David Miller |
| Robert Miller |
| John Smith |
+---------------+
4 rows in set (0.00 sec)
4. 글자 수가 X자 미만인 레코드 조회하기
이제 CHAR_LENGTH() 함수를 활용해 이름 길이가 12자 미만인 레코드만 조회하는 쿼리를 작성해 보겠습니다.
mysql> select *from DemoTable where char_length(FullName) < 12;
실행 결과는 다음과 같습니다.
+-------------+
| FullName |
+-------------+
| Chris Brown |
| John Smith |
+-------------+
2 rows in set (0.00 sec)
위 결과를 보면 'Chris Brown'(11자)과 'John Smith'(10자)처럼 글자 수가 12자 미만인 레코드만 반환된 것을 확인할 수 있습니다. 반면 'David Miller'(12자)와 'Robert Miller'(13자)는 조건에 해당하지 않아 제외되었습니다.
참고: CHAR_LENGTH()와 LENGTH()의 차이
MySQL에는 비슷한 함수로 LENGTH()가 있는데, 두 함수는 다음과 같은 차이가 있습니다.
CHAR_LENGTH(): 문자열의 글자 수를 반환합니다. 한글이나 특수문자도 한 글자로 계산됩니다.
LENGTH(): 문자열의 바이트 수를 반환합니다. UTF-8 환경에서는 한글 한 글자가 3바이트로 계산되므로 결과가 달라질 수 있습니다.
따라서 한글 데이터를 다룰 때는 글자 수 기준으로 필터링하는 CHAR_LENGTH()를 사용하는 것이 안전합니다. 숫자 대신 변수나 컬럼 값을 조건으로 사용할 수도 있어, 다양한 상황에서 유연하게 활용할 수 있습니다.