반응형
연관글
- 2025.04.18 - [Programing/javascript] - 💰 숫자를 한글로 금액 단위로 표현
- 2025.04.18 - [Programing/javascript] - 💻 숫자를 한글 숫자 표기로 변환
웹 서비스나 전자문서에서 금액을 숫자가 아닌 한글로 표기해야 하는 경우가 종종 있습니다. 예를 들어 "₩12500"이라는 금액을 "일만이천오백원"과 같이 표기하고자 할 때, MySQL에서 이 기능을 구현하는 방법에 대해 정리합니다.
✅ 기본 전제
MySQL은 기본적으로 숫자를 한글로 변환하는 내장 함수는 제공하지 않습니다. 따라서 다음과 같은 대안 중 하나를 사용해야 합니다:
- 애플리케이션 레벨에서 처리 (권장)
- 스토어드 함수나 프로시저로 직접 구현
✅ 방법 1: 애플리케이션 레벨 처리 (PHP 예시)
function numberToKorean($number) {
$unitWords = ['', '만', '억', '조', '경'];
$splitUnit = ['', '십', '백', '천'];
$numWords = ['', '일', '이', '삼', '사', '오', '육', '칠', '팔', '구'];
$result = '';
$number = (string) $number;
$length = strlen($number);
$unitIndex = 0;
while ($length > 0) {
$chunk = substr($number, max(0, $length - 4), min(4, $length));
$chunkLength = strlen($chunk);
$chunkResult = '';
for ($i = 0; $i < $chunkLength; $i++) {
$digit = (int)$chunk[$i];
if ($digit > 0) {
$chunkResult .= $numWords[$digit] . $splitUnit[$chunkLength - $i - 1];
}
}
if ($chunkResult !== '') {
$result = $chunkResult . $unitWords[$unitIndex] . $result;
}
$unitIndex++;
$length -= 4;
}
return $result . '원';
}
// 사용 예
echo numberToKorean(12500); // 출력: 일만이천오백원
📌 장점
- 논리 작성과 디버깅이 쉬움
- 다양한 언어에서 재사용 가능
📌 단점
- DB에서 직접 처리할 수 없음
✅ 방법 2: MySQL 스토어드 함수로 구현 (단순 예시)
MySQL에서 한글 변환을 전부 처리하려면, 매우 복잡한 CASE문 또는 루프 기반의 UDF를 작성해야 합니다. 다음은 단순한 자리 수 처리를 위한 개념적 예시입니다.
DELIMITER $$
CREATE FUNCTION number_to_korean(n INT) RETURNS VARCHAR(100)
BEGIN
DECLARE result VARCHAR(100) DEFAULT '';
IF n = 10000 THEN
SET result = '일만원';
ELSEIF n = 1000 THEN
SET result = '천원';
ELSEIF n = 5000 THEN
SET result = '오천원';
ELSE
SET result = CONCAT(n, '원');
END IF;
RETURN result;
END$$
DELIMITER ;
📌 비추천 사유
- 관리 복잡도 증가
- 숫자 조합이 무한한 점으로 인해 CASE문 확장 불가
✅ 결론
MySQL에서 숫자를 한글 금액으로 표현하고자 한다면, 복잡한 로직과 문자열 연산이 필요한 만큼 DB 내부보다는 애플리케이션 레벨에서 처리하는 것을 권장합니다. PHP, JavaScript, Python 등에서 공통적으로 처리 로직을 작성하여 재사용성을 높이고 유지보수를 단순화하는 것이 가장 현실적인 접근입니다.
반응형
'Programing > MySQL' 카테고리의 다른 글
| MySQL 인덱스: B-Tree, Fulltext, Spatial의 차이와 사용법 (MySQL Index Guide: B-Tree, Fulltext, Spatial) (5) | 2025.06.25 |
|---|---|
| MySQL 속도 측정을 위한 SQL_NO_CACHE (0) | 2021.09.08 |
| mysql strip_tags function / html 제거 후 검색 (1) | 2020.10.20 |
| MySQL 변수값 IN() 검색? FIND_IN_SET() 함수 이용 (1) | 2018.12.31 |
| MySQL EXPLAIN 사용하여 Query 퍼포먼스 확인. (0) | 2016.09.13 |
| group_concat 다중 레코드를 한개 컬럼으로 출력. (0) | 2013.07.15 |
| MySQL - 초성검색 (0) | 2013.02.21 |
| MySQL (0) | 2011.11.14 |