MySQL에서 통화 기호가 붙은 가격 데이터 합산하기
데이터베이스를 운영하다 보면 가격 정보에 '€200.00'처럼 통화 기호가 함께 저장되어 있는 경우를 자주 만나게 됩니다. 이런 문자열 형태의 값은 그대로는 숫자 연산이 불가능하기 때문에, 합계를 구할 때 약간의 처리가 필요합니다.
이 문제는 집계 함수 SUM()과 REPLACE() 함수를 조합하면 간단하게 해결할 수 있습니다. 아래에서 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable616 (Price varchar(100));
Query OK, 0 rows affected (0.59 sec)
2. 샘플 데이터 입력
INSERT 명령을 사용해 통화 기호가 포함된 가격 데이터를 몇 개 입력합니다.
mysql> insert into DemoTable616 values('€200.00');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable616 values('€300.00');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable616 values('€500.00');
Query OK, 1 row affected (0.12 sec)3. 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 봅니다.
mysql> select *from DemoTable616;
실행 결과는 다음과 같습니다.
+-----------+
| Price |
+-----------+
| €200.00 |
| €300.00 |
| €500.00 |
+-----------+
3 rows in set (0.00 sec)
4. SUM()과 REPLACE()로 합계 구하기
핵심은 SUM() 함수 내부에서 REPLACE()를 사용해 통화 기호('€')를 제거하는 것입니다. 기호가 제거된 문자열은 MySQL이 자동으로 숫자로 변환하여 정상적으로 합산됩니다.
mysql> select sum(replace(Price, '€', '')) as Total_Price from DemoTable616;
위 쿼리를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
+-------------+
| Total_Price |
+-------------+
| 1000 |
+-------------+
1 row in set (0.00 sec)
정리 및 추가 팁
'€200.00', '€300.00', '€500.00' 세 값의 합계인 1000이 정상적으로 출력되었습니다.
참고로, 통화 기호가 값의 뒤에 붙어 있는 경우(예: '200.00€')에도 동일한 방식으로 처리할 수 있습니다. REPLACE()는 문자열 내 모든 위치의 해당 문자를 제거하기 때문입니다.
mysql> select sum(replace(Price, '€', '')) as Total_Price from DemoTable616;
또한 소수점 이하 자릿수를 유지하고 싶다면 ROUND()나 FORMAT() 함수를 함께 사용하면 더 깔끔한 결과를 얻을 수 있습니다.
mysql> select format(sum(replace(Price, '€', '')), 2) as Total_Price from DemoTable616;
다만 장기적인 관점에서는 금액 데이터를 VARCHAR가 아닌 DECIMAL 타입으로 저장하고, 통화 기호는 화면 출력 시에만 붙여 주는 것이 성능과 데이터 무결성 측면에서 훨씬 바람직합니다.