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에서 쉼표로 구분된 숫자 문자열도 간단하게 합산할 수 있습니다.