MySQL에서는 LENGTH() 함수와 CASE 문을 함께 사용하면 긴 텍스트를 원하는 길이만큼 잘라내고, 잘린 자리 뒤에 특정 문자를 덧붙이는 처리를 할 수 있습니다. 예를 들어 값의 길이가 7자리를 초과하면 앞 7자리만 남기고 나머지를 잘라낸 후 지정한 숫자를 붙이고, 7자리 이하라면 원래 값을 그대로 출력하는 방식입니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 만들겠습니다. 다음 쿼리를 실행해 TruncateText 테이블을 생성합니다.
mysql> create table TruncateText
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Number longtext,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.66 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용해 여러 개의 레코드를 추가합니다.
mysql> insert into TruncateText(Number) values('64575868667687');
Query OK, 1 row affected (0.11 sec)
mysql> insert into TruncateText(Number) values('7654332');
Query OK, 1 row affected (0.17 sec)
mysql> insert into TruncateText(Number) values('25434656');
Query OK, 1 row affected (0.19 sec)
mysql> insert into TruncateText(Number) values('6457586');
Query OK, 1 row affected (0.17 sec)
mysql> insert into TruncateText(Number) values('958567686868675757574');
Query OK, 1 row affected (0.13 sec)
mysql> insert into TruncateText(Number) values('374785868968787');
Query OK, 1 row affected (0.21 sec)
mysql> insert into TruncateText(Number) values('58969678685858585858585858585');
Query OK, 1 row affected (0.14 sec)
3. 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from TruncateText;
실행 결과는 다음과 같습니다.
+----+-------------------------------+ | Id | Number | +----+-------------------------------+ | 1 | 64575868667687 | | 2 | 7654332 | | 3 | 25434656 | | 4 | 6457586 | | 5 | 958567686868675757574 | | 6 | 374785868968787 | | 7 | 58969678685858585858585858585 | +----+-------------------------------+ 7 rows in set (0.00 sec)
4. CASE 문으로 조건부 텍스트 자르기
위 결과를 보면 길이가 7자리를 넘는 값들이 있습니다. 이번에는 길이가 7보다 큰 경우 앞 7자리만 남긴 뒤 그 뒤에 '99999999'를 덧붙이고, 길이가 7 이하인 경우에는 원본 값을 그대로 출력하는 쿼리를 작성해 보겠습니다.
mysql> SELECT *, CASE WHEN LENGTH(Number) > 7 -> THEN CONCAT(SUBSTRING(Number, 1, 7), '99999999') -> ELSE Number END AS AddNumber -> FROM TruncateText;
실행 결과는 다음과 같습니다.
+----+-------------------------------+-----------------+ | Id | Number | AddNumber | +----+-------------------------------+-----------------+ | 1 | 64575868667687 | 645758699999999 | | 2 | 7654332 | 7654332 | | 3 | 25434656 | 254346599999999 | | 4 | 6457586 | 6457586 | | 5 | 958567686868675757574 | 958567699999999 | | 6 | 374785868968787 | 374785899999999 | | 7 | 58969678685858585858585858585 | 589696799999999 | +----+-------------------------------+-----------------+ 7 rows in set (0.00 sec)
5. 결과 분석
출력 결과를 보면 길이가 7자리를 초과하는 값들은 앞 7자리만 남기고 나머지가 모두 잘린 뒤, 7번째 자리 바로 뒤에 '99999999'가 붙은 것을 확인할 수 있습니다. 반면 길이가 정확히 7이거나 그보다 짧은 값(예: 7654332, 6457586)은 어떠한 변경 없이 그대로 출력됩니다.
이처럼 LENGTH(), SUBSTRING(), CONCAT() 함수와 CASE 문을 조합하면 별도의 애플리케이션 로직 없이도 MySQL 쿼리만으로 긴 텍스트를 조건에 따라 잘라내고 원하는 형식으로 가공할 수 있습니다. 목록 화면에서 요약 텍스트를 보여주거나, 긴 번호나 코드를 축약해서 표시해야 할 때 유용하게 활용할 수 있습니다.