PROCEDURE :
DROP PROCEDURE IF EXISTS `p_terbilang`;
DELIMITER ;;
CREATE PROCEDURE `p_terbilang`(IN angka bigint, OUT retval TEXT)
BEGIN
-- @rgiapratama - 2017
DECLARE tmp1 TEXT;
DECLARE tmp2 TEXT;
SET max_sp_recursion_depth := 20;
IF(angka = 0) THEN
SET retval = '';
ELSEIF(angka < 12) THEN
SET retval = ELT(angka,'satu','dua','tiga','empat','lima','enam','tujuh','delapan','sembilan','sepuluh','sebelas');
ELSEIF (angka < 20) THEN
CALL p_terbilang((angka-10),tmp1);
SET retval = CONCAT(tmp1,' belas');
ELSEIF (angka < 100) THEN
CALL p_terbilang(FLOOR(angka/10),tmp1);
CALL p_terbilang((angka%10),tmp2);
SET retval = CONCAT(tmp1,' puluh ',tmp2);
ELSEIf (angka < 200) THEN
CALL p_terbilang((angka-100),tmp1);
SET retval = CONCAT('seratus ',tmp1);
ELSEIF (angka < 1000) THEN
CALL p_terbilang(FLOOR(angka/100),tmp1);
CALL p_terbilang((angka%100),tmp2);
SET retval = CONCAT(tmp1,' ratus ',tmp2);
ELSEIF (angka < 2000) THEN
CALL p_terbilang((angka-1000),tmp1);
SET retval = CONCAT('seribu ',tmp1);
ELSEIF (angka < 1000000) THEN
CALL p_terbilang(FLOOR(angka/1000),tmp1);
CALL p_terbilang((angka%1000),tmp2);
SET retval = CONCAT(tmp1,' ribu ',tmp2);
ELSEIF (angka < 1000000000) THEN
CALL p_terbilang(FLOOR(angka/1000000),tmp1);
CALL p_terbilang((angka%1000000),tmp2);
SET retval = CONCAT(tmp1,' juta ',tmp2);
ELSEIF (angka < 1000000000000) THEN
CALL p_terbilang(FLOOR(angka/1000000000),tmp1);
CALL p_terbilang((angka%1000000000),tmp2);
SET retval = CONCAT(tmp1,' milyar ',tmp2);
ELSE SET retval = 'GIA';
END IF;
END
;;
DELIMITER ;
FUNCTION :
DROP FUNCTION IF EXISTS `f_terbilang`;
DELIMITER ;;
CREATE FUNCTION `f_terbilang`(angka BIGINT) RETURNS text CHARSET latin1
BEGIN
-- @rgiapratama - 2017
DECLARE v_result TEXT;
CALL p_terbilang(angka, v_result);
RETURN REPLACE(v_result,' ',' ');
END
;;
DELIMITER ;
Hasil :
mysql> SELECT f_terbilang(19048500);
+----------------------------------------------------------+
| f_terbilang(19048500) |
+----------------------------------------------------------+
| sembilan belas juta empat puluh delapan ribu lima ratus |
+----------------------------------------------------------+
1 row in set (0.07 sec)
mysql>