이번 글에서는 OCTET_LENGTH() 함수를 사용하여 레코드의 길이를 확인하고, 길이가 1보다 큰 레코드만 조회하는 방법을 알아보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable ( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserName varchar(20), UserGender varchar(20) ); Query OK, 0 rows affected (0.55 sec)
2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable(UserName,UserGender) values('John','M');
Query OK, 1 row affected (0.82 sec)
mysql> insert into DemoTable(UserName,UserGender) values('Carol','Male');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(UserName,UserGender) values('Mia','Female');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(UserName,UserGender) values('Emma','F');
Query OK, 1 row affected (0.17 sec)3. 전체 레코드 조회하기
SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+----------+------------+ | UserId | UserName | UserGender | +--------+----------+------------+ | 1 | John | M | | 2 | Carol | Male | | 3 | Mia | Female | | 4 | Emma | F | +--------+----------+------------+ 4 rows in set (0.00 sec)
4. OCTET_LENGTH로 길이가 1보다 큰 레코드 조회하기
이제 핵심인 조회 쿼리입니다. WHERE 절에서 OCTET_LENGTH() 함수를 사용하면 특정 컬럼 값의 바이트 길이를 기준으로 조건을 걸 수 있습니다. 아래 쿼리는 UserGender 컬럼의 길이가 1보다 큰 레코드만 가져옵니다.
mysql> select *from DemoTable where OCTET_LENGTH(UserGender) > 1;
실행 결과는 다음과 같습니다.
+--------+----------+------------+ | UserId | UserName | UserGender | +--------+----------+------------+ | 2 | Carol | Male | | 3 | Mia | Female | +--------+----------+------------+ 2 rows in set (0.00 sec)
결과를 보면 'M'과 'F'처럼 길이가 1인 값은 제외되고, 'Male'과 'Female'처럼 길이가 1보다 큰 값만 정상적으로 조회된 것을 확인할 수 있습니다.
참고: CHAR_LENGTH와의 차이점
OCTET_LENGTH()는 문자열의 바이트(byte) 길이를 반환하는 반면, CHAR_LENGTH()는 문자 개수를 기준으로 길이를 계산합니다. 한글처럼 멀티바이트 문자가 포함될 수 있는 데이터라면 목적에 맞는 함수를 선택해서 사용하는 것이 좋습니다.