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

MySQL에서 문자열이 10개 이상의 단어를 포함할 경우 점을 추가하는 쿼리 작성 방법

문자열이 10개 이상의 단어를 포함하고 있을 때 뒤에 점(......)을 추가하려면 CASE 문SUBSTRING_INDEX() 함수를 함께 활용하면 됩니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Title text
-> );
Query OK, 0 rows affected (0.61 sec)

2. 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 샘플 데이터를 입력합니다. 첫 번째 레코드는 11개의 단어로 구성되어 있고, 두 번째 레코드는 8개의 단어로 구성되어 있습니다.

mysql> insert into DemoTable values('My name is John and this is my first tutorial on MySQL');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DemoTable values('This is Carol and I work on MongoDB');
Query OK, 1 row affected (0.19 sec)

3. 전체 데이터 조회하기

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

출력 결과

+--------------------------------------------------------+
| Title                                                  |
+--------------------------------------------------------+
| My name is John and this is my first tutorial on MySQL |
| This is Carol and I work on MongoDB                    |
+--------------------------------------------------------+
2 rows in set (0.00 sec)

4. 조건부 점 추가 쿼리 작성하기

다음은 문자열이 10개 이상의 단어를 포함하는 경우에만 점을 추가하는 쿼리입니다.

mysql> select (case when substring_index(tbl.Title, ' ', 10) = tbl.Title then tbl.Title
-> else concat(substring_index(tbl.Title, ' ', 10), '....................')
-> end) AS AddDots
-> from DemoTable tbl;

쿼리 동작 원리

SUBSTRING_INDEX(Title, ' ', 10)는 공백을 기준으로 앞에서부터 10번째 단어까지만 잘라서 반환합니다. 만약 원본 문자열의 단어 수가 10개 이하라면 잘린 결과가 원본과 동일하게 되므로, CASE 문에서 이를 비교하여 다음과 같이 분기 처리합니다.

  • 두 값이 같으면 → 단어 수가 10개 이하이므로 원본 문자열을 그대로 반환
  • 두 값이 다르면 → 단어 수가 11개 이상이므로 앞 10개 단어 뒤에 점(......)을 붙여 반환

출력 결과

+-------------------------------------------------------------------+
| AddDots                                                           |
+-------------------------------------------------------------------+
| My name is John and this is my first tutorial.................... |
| This is Carol and I work on MongoDB                               |
+-------------------------------------------------------------------+
2 rows in set (0.00 sec)

결과를 보면 11개 단어를 가진 첫 번째 레코드는 10번째 단어까지 표시된 후 점이 추가된 반면, 8개 단어를 가진 두 번째 레코드는 원본 그대로 출력된 것을 확인할 수 있습니다. 이처럼 CASE 문과 SUBSTRING_INDEX() 함수를 조합하면 게시글 미리보기나 목록 요약 텍스트를 처리할 때 매우 유용하게 활용할 수 있습니다.