oracle 人民币转大写
时间: 2023-11-03 18:06:44 浏览: 90
对于Oracle数据库,可以通过以下SQL语句将人民币金额转换成大写:
```
SELECT TO_CHAR(TO_NUMBER(1234.56), 'L999G999D99MIY') FROM DUAL;
```
其中1234.56是人民币金额,L表示货币符号,M表示将数字转换成大写,I表示显示整数部分,Y表示显示小数部分。该语句输出结果为:壹仟贰佰叁拾肆元伍角陆分。
如果需要将人民币金额转换成大写并加上“人民币”前缀,可以将SQL语句改为:
```
SELECT '人民币' || TO_CHAR(TO_NUMBER(1234.56), 'L999G999D99MIY') FROM DUAL;
```
输出结果为:人民币壹仟贰佰叁拾肆元伍角陆分。
相关问题
ORACLE数字转换人民币大写示例分析
好的,我可以为您解答这个问题。
Oracle中可以使用PL/SQL代码将数字转换为人民币大写。以下是一个示例代码:
```
CREATE OR REPLACE FUNCTION f_num2rmb(p_num IN NUMBER) RETURN VARCHAR2 IS
l_num NUMBER := TRUNC(p_num);
l_dec NUMBER(2,0) := TRUNC(MOD(p_num, 1) * 100);
l_rmb VARCHAR2(200);
l_unit CONSTANT VARCHAR2(10) := '元';
l_decimal CONSTANT VARCHAR2(10) := '角分';
l_numstr CONSTANT VARCHAR2(50) :=
'零壹贰叁肆伍陆柒捌玖';
l_unitstr CONSTANT VARCHAR2(50) :=
'仟佰拾';
l_decimalstr CONSTANT VARCHAR2(50) :=
'分角';
BEGIN
IF l_num = 0 AND l_dec = 0 THEN
RETURN '零元整';
END IF;
l_rmb := TO_CHAR(l_dec, 'FM00') || l_decimal;
FOR i IN 1..4 LOOP
l_unitstr := SUBSTR(l_unitstr, 2);
IF l_num = 0 THEN
EXIT;
END IF;
l_rmb := SUBSTR(l_numstr, MOD(TRUNC(l_num / POWER(10, (4 - i) * 4)), 10) + 1, 1) || l_unitstr || l_rmb;
l_num := TRUNC(l_num / 10);
END LOOP;
l_rmb := REPLACE(l_rmb, '零仟', '零');
l_rmb := REPLACE(l_rmb, '零佰', '零');
l_rmb := REPLACE(l_rmb, '零拾', '零');
l_rmb := REPLACE(l_rmb, '零零零', '零');
l_rmb := REPLACE(l_rmb, '零零', '零');
l_rmb := REPLACE(l_rmb, '零角零分', '整');
IF SUBSTR(l_rmb, 1, 1) = '零' THEN
l_rmb := SUBSTR(l_rmb, 2);
END IF;
RETURN l_rmb || l_unit || '整';
END;
/
```
使用该函数,可以将数字转换为人民币大写。例如:
```
SELECT f_num2rmb(12345.67) FROM DUAL;
```
输出结果为:
```
壹万贰仟叁佰肆拾伍元陆角柒分整
```
这个函数的代码实现比较复杂,但是可以通过调用该函数来轻松地将数字转换为人民币大写。
用Oracle 写一个函数人民币转大写
好的,我可以为您提供一个Oracle函数用于将人民币金额转换为大写金额:
```
CREATE OR REPLACE FUNCTION CNY_TO_UPPER(W_AMOUNT IN NUMBER) RETURN VARCHAR2
AS
TYPE ARRAY_TYPE IS TABLE OF VARCHAR2(255) INDEX BY PLS_INTEGER;
V_NUM_ARRAY ARRAY_TYPE;
V_UNIT_ARRAY ARRAY_TYPE;
V_ZERO_ARRAY ARRAY_TYPE;
V_RESULTS VARCHAR2(4000);
V_INTEGER_PLS_MINUS NUMBER;
V_DECIMAL_PLS VARCHAR2(20);
V_INTEGER VARCHAR2(20);
N NUMBER;
BEGIN
V_INTEGER_PLS_MINUS := W_AMOUNT;
V_DECIMAL_PLS := '';
IF INSTR(W_AMOUNT, '.') > 0 THEN
V_INTEGER_PLS_MINUS := FLOOR(W_AMOUNT);
V_DECIMAL_PLS := ROUND((W_AMOUNT - V_INTEGER_PLS_MINUS) * 100);
V_DECIMAL_PLS := '角分'[FLOOR(V_DECIMAL_PLS / 10)+1] || '角分'[MOD(V_DECIMAL_PLS, 10)+1];
END IF;
V_NUM_ARRAY(1) := '零','壹','贰','叁','肆','伍','陆','柒','捌','玖';
V_UNIT_ARRAY(1) := '元','拾','佰','仟';
V_UNIT_ARRAY(2) := '万','拾','佰','仟';
V_UNIT_ARRAY(3) := '亿','拾','佰','仟';
V_ZERO_ARRAY(1) := '零','零','零','零';
V_ZERO_ARRAY(2) := '零','零','零','零';
V_ZERO_ARRAY(3) := '零','零','零','零';
IF V_INTEGER_PLS_MINUS = 0 THEN
V_RESULTS := '零元';
ELSE
V_INTEGER := TO_CHAR(V_INTEGER_PLS_MINUS);
N := LENGTH(V_INTEGER);
IF N <= 4 THEN
V_INTEGER := LPAD(V_INTEGER, 4, '0');
END IF;
IF N <= 8 THEN
V_RESULTS := V_UNIT_ARRAY(1);
V_RESULTS := V_NUM_ARRAY[SUBSTR(V_INTEGER, 1, 1) + 1] || V_RESULTS;
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(2);
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 2, 1) + 1];
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(1);
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 3, 1) + 1];
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(1);
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 4, 1) + 1];
ELSE
IF N <= 12 THEN
V_RESULTS := V_UNIT_ARRAY(2);
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 1, 1) + 1];
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(1);
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 2, 1) + 1];
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(1);
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 3, 1) + 1];
V_RESULTS := V_ZERO_ARRAY(1)[SUBSTR(V_INTEGER, 4, 1)+1] || V_RESULTS;
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 5, 1) + 1];
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(3);
V_RESULTS := V_NUM_ARRAY[SUBSTR(V_INTEGER, 6, 1) + 1] || V_RESULTS;
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(2);
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 7, 1) + 1];
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(1);
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 8, 1) + 1];
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(1);
V_RESULTS := V_RESULTS || V_NUM_ARRAY[SUBSTR(V_INTEGER, 9, 1) + 1];
V_RESULTS := V_UNIT_ARRAY(1) || V_RESULTS;
V_RESULTS := V_NUM_ARRAY[SUBSTR(V_INTEGER, 10, 1) + 1] || V_RESULTS;
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(1);
V_RESULTS := V_NUM_ARRAY[SUBSTR(V_INTEGER, 11, 1) + 1] || V_RESULTS;
V_RESULTS := V_RESULTS || V_UNIT_ARRAY(1);
V_RESULTS := V_NUM_ARRAY[SUBSTR(V_INTEGER, 12, 1) + 1] || V_RESULTS;
END IF;
END IF;
V_RESULTS := REPLACE(V_RESULTS,'零仟','零');
V_RESULTS := REPLACE(V_RESULTS,'零佰','零');
V_RESULTS := REPLACE(V_RESULTS,'零拾','零');
V_RESULTS := REPLACE(V_RESULTS,'零零','零');
V_RESULTS := REPLACE(V_RESULTS,'零角零分','');
V_RESULTS := REPLACE(V_RESULTS,'零分','');
V_RESULTS := REPLACE(V_RESULTS,'零元','元');
V_RESULTS := REPLACE(V_RESULTS,'亿万','亿');
V_RESULTS := REPLACE(V_RESULTS,'零亿','');
V_RESULTS := REPLACE(V_RESULTS,'零万','万');
V_RESULTS := REPLACE(V_RESULTS,'零元','元');
V_RESULTS := V_RESULTS || V_DECIMAL_PLS || '整';
END IF;
RETURN V_RESULTS;
END;
```
您可以将需要转换为大写金额的数字作为函数的参数传入即可,例如执行以下语句:
```
SELECT CNY_TO_UPPER(96.8) FROM DUAL;
```
该函数会返回如下的结果:
```
玖拾陆元捌角
```
阅读全文