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

MySQL에서 쉼표로 구분된 숫자 문자열의 합계를 계산하는 방법

MySQL에서는 사용자 정의 함수(Stored Function)를 만들어 쉼표로 구분된 숫자 문자열의 합계를 손쉽게 계산할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 테스트에 사용할 테이블을 생성합니다. 여기서는 varchar 타입의 컬럼을 만들고, 이 컬럼에 숫자들을 문자열 형태로 저장할 것입니다.

mysql> create table DemoTable
    -> (
    -> ListOfValues varchar(50)
    -> );
Query OK, 0 rows affected (0.56 sec)

2. 데이터 삽입 및 확인

insert 명령을 사용해 쉼표로 구분된 숫자 문자열을 테이블에 삽입합니다.

mysql> insert into DemoTable values('20,10,40,50,60');
Query OK, 1 row affected (0.14 sec)

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+----------------+
| ListOfValues   |
+----------------+
| 20,10,40,50,60 |
+----------------+
1 row in set (0.00 sec)

3. 합계를 계산하는 함수 만들기

이제 쉼표로 구분된 문자열의 합계를 계산하는 함수를 생성합니다. 이 함수는 SUBSTRING_INDEX()INSTR(), MID() 함수를 활용하여 문자열을 하나씩 잘라내면서 값을 누적하는 방식으로 동작합니다.

mysql> DELIMITER ??
mysql> create function totalSumInCommaSeparatedString(input varchar(50))
    -> returns int
    -> deterministic
    -> no sql
    -> begin
    -> declare totalSum int default 0;
    -> while instr(input, ",") > 0 do
    -> set totalSum = totalSum + substring_index(input, ",", 1);
    -> set input = mid(input, instr(input, ",") + 1);
    -> end while;
    -> return totalSum + input;
    -> end ??
Query OK, 0 rows affected (0.17 sec)
mysql> DELIMITER ;

함수 동작 원리

함수의 작동 방식은 다음과 같습니다.

- instr(input, ","): 문자열 내에서 쉼표의 위치를 찾습니다.
- substring_index(input, ",", 1): 첫 번째 쉼표 앞까지의 숫자를 추출합니다.
- mid(input, instr(input, ",") + 1): 처리한 숫자와 쉼표를 제거한 나머지 문자열을 남깁니다.
- 쉼표가 더 이상 없을 때까지 반복한 후, 마지막 남은 숫자를 더해 최종 합계를 반환합니다.

4. 함수 실행 결과 확인

생성한 함수를 호출하여 쉼표로 구분된 문자열의 합계를 구해 보겠습니다.

mysql> select totalSumInCommaSeparatedString(ListOfValues) as TotalSum from DemoTable;

실행 결과는 다음과 같습니다.

+----------+
| TotalSum |
+----------+
|      180 |
+----------+
1 row in set (0.00 sec)

결과를 보면 '20,10,40,50,60'의 합계인 180이 정상적으로 출력되는 것을 확인할 수 있습니다. 이처럼 사용자 정의 함수를 활용하면 MySQL에서 쉼표로 구분된 숫자 문자열도 간단하게 합산할 수 있습니다.