CREATE OR REPLACE FUNCTION "DBUSER1"."NUM_TO_CHINESE"
(P_NUM NUMERIC(16,2))
RETURNS VARCHAR(255)
LANGUAGE SQL
SPECIFIC SQL230307145232260
BEGIN
DECLARE RESULT VARCHAR(800);
DECLARE NUM_LEFT VARCHAR(10); --小数点左边的数字
DECLARE NUM_RIGHT VARCHAR(20); --小数点右边的数字
DECLARE NUM_RIGHT1 VARCHAR(20); --小数点右边的数字
DECLARE STR1 VARCHAR(100) DEFAULT '零壹贰叁肆伍陆柒捌玖'; --数字大写
DECLARE STR2 VARCHAR(100) DEFAULT '元拾佰仟万拾佰仟亿'; --数字位数(从低至高)
DECLARE STR3 VARCHAR(100) DEFAULT '角分'; --数字位数(从低至高)
DECLARE NUM_PRE INT DEFAULT 1; --前一位上的数字
DECLARE NUM_CURRENT INT; --当前位上的数字
DECLARE NUM_COUNT INT DEFAULT 0; --当前数字位数
DECLARE NUM_COUNT1 INT DEFAULT 0; --当前数字位数
DECLARE NUM VARCHAR(100);
DECLARE CH VARCHAR(100);
DECLARE QCH VARCHAR(100);
DECLARE SIGN BOOLEAN DEFAULT FALSE;
DECLARE SIGN1 BOOLEAN DEFAULT FALSE;
--DECLARE NUM_ROUND VARCHAR(100); --转换数字为小数点后2位的字符(正数)
IF P_NUM IS NULL THEN
RETURN NULL;
END IF; --转换数字为null时返回null
SET RESULT = '';
SET NUM = to_char(P_NUM);
IF length(NUM)> 12 THEN --数字做多为12位
RETURN NULL;
END IF;
SET NUM_LEFT = SUBSTR(NUM,length(NUM)-1); --小数点左边的数字
SET NUM_RIGHT = SUBSTR(NUM,1,length(NUM)-3); --小数点右边的数字
SET NUM_RIGHT1 = NUM_RIGHT;
--小数点右边处理
while NUM_RIGHT != 0 DO
SET NUM_CURRENT = MOD(NUM_RIGHT,10); --当前数字
IF NUM_PRE = 0 AND NUM_CURRENT = 0 THEN
ELSE
IF NUM_CURRENT !=0 THEN --判断当前数是否为零
IF NUM_COUNT > 3 AND SIGN = FALSE THEN
SET RESULT = '万'|| RESULT;
SET SIGN = TRUE;
END IF;
SET CH = SUBSTR(STR1, 1 + 2 * NUM_CURRENT, 2);--获取大写数字
IF NUM_COUNT = 4 THEN
SET RESULT = CH || RESULT;
ELSE
SET QCH = SUBSTR(STR2, 1 + 2 * NUM_COUNT, 2); --获取单位
SET RESULT = CH ||QCH || RESULT;
END IF;
ELSE
IF NUM_COUNT = 0 THEN --当前元素为第一位
SET RESULT = '元' || RESULT;
ELSE
IF NUM_COUNT = 4 THEN
ELSE
SET CH = SUBSTR(STR1, 1 + 2 * NUM_CURRENT, 2);--获取大写数字
SET RESULT = CH || RESULT;
END IF;
END IF;
END IF;
END IF;
SET NUM_RIGHT = FLOOR(NUM_RIGHT / 10);
SET NUM_COUNT = NUM_COUNT + 1; --当前位位数
SET NUM_PRE = NUM_CURRENT; --前一位余数
END WHILE;
--小数点左边处理
IF NUM_LEFT = '00' THEN
SET RESULT = RESULT || '整';
ELSE
IF substr(NUM_LEFT,1,1)='0' THEN
SET RESULT = RESULT;
ELSE
SET RESULT = RESULT|| substr(STR1,1 + 2 * substr(NUM_LEFT,1,1),2) ||'角';
END IF;
IF substr(NUM_LEFT,2,1)='0' THEN
ELSE
SET RESULT = RESULT|| substr(STR1,1 + 2 * substr(NUM_LEFT,2,1),2)||'分';
END IF ;
END IF;
RETURN result;
END
DB2实现数字(12位)人民币小写转大写自定义函数实现
于 2023-03-10 13:39:59 首次发布