Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 LENGTH()와 CASE 문으로 긴 텍스트 자르고 줄임표 붙이기

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 쿼리만으로 긴 텍스트를 조건에 따라 잘라내고 원하는 형식으로 가공할 수 있습니다. 목록 화면에서 요약 텍스트를 보여주거나, 긴 번호나 코드를 축약해서 표시해야 할 때 유용하게 활용할 수 있습니다.