MySQL에서 문자열 길이가 특정 값 이하일 때는 SUBSTRING() 함수로 부분 문자열을 추출하고, 그보다 길 경우에는 사용자 정의 메시지를 출력하고 싶다면 CASE 문과 함께 조건 처리를 하면 됩니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1402
-> (
-> EmployeeName varchar(40)
-> );
Query OK, 0 rows affected (0.62 sec)
2. 데이터 삽입하기
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1402 values('Adam Smith');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1402 values('Chris Brown');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1402 values('David Miller');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1402 values('Carol Taylor');
Query OK, 1 row affected (0.10 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1402;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------------+
| EmployeeName |
+--------------+
| Adam Smith |
| Chris Brown |
| David Miller |
| Carol Taylor |
+--------------+
4 rows in set (0.00 sec)
4. 조건에 따라 부분 문자열 또는 메시지 출력하기
이제 핵심 쿼리입니다. CHAR_LENGTH() 함수로 이름 길이를 검사하여, 11자 이하면 앞 5글자만 추출하고 그렇지 않으면 사용자 정의 메시지를 반환합니다.
mysql> select *, case when char_length(EmployeeName) <=11 then substring(EmployeeName,1,5)
-> else 'EmployeeName is greater than 11'
-> end as Result
-> from DemoTable1402;
실행 결과는 다음과 같습니다.
+--------------+---------------------------------+
| EmployeeName | Result |
+--------------+---------------------------------+
| Adam Smith | Adam |
| Chris Brown | Chris |
| David Miller | EmployeeName is greater than 11 |
| Carol Taylor | EmployeeName is greater than 11 |
+--------------+---------------------------------+
4 rows in set (0.04 sec)
결과 해석
'Adam Smith'와 'Chris Brown'은 길이가 11자 이하이므로 SUBSTRING() 함수를 통해 첫 5글자인 'Adam'과 'Chris'가 출력되었습니다. 반면 'David Miller'(12자)와 'Carol Taylor'(12자)는 조건을 초과했기 때문에 지정한 사용자 정의 메시지가 대신 표시됩니다.
이처럼 MySQL의 CASE 문과 CHAR_LENGTH(), SUBSTRING() 함수를 조합하면 문자열 길이에 따라 유연하게 다른 값을 출력할 수 있습니다.