金额大写转小写SQL

Create Or Replace Function Money2Chinese(Money In Number) Return Varchar2 Is

strYuan       Varchar2(150);

strYuanFen    Varchar2(152);

numLenYuan    Number;

numLenYuanFen Number;

strRstYuan    Varchar2(600);

strRstFen     Varchar2(200);

strRst        Varchar2(800);

Type typeTabMapping Is Table Of Varchar2(2) Index By Binary_Integer;

tabNumMapping  typeTabMapping;

tabUnitMapping typeTabMapping;

numUnitIndex   Number;

i              Number;

j              Number;

charCurrentNum Char(1);

Begin

If Money Is Null Then

Return Null;

End If;

strYuan := TO_CHAR(FLOOR(Money));

If strYuan = ‘0‘ Then

numLenYuan := 0;

strYuanFen := lpad(TO_CHAR(FLOOR(Money * 100)), 2, ‘0‘);

Else

numLenYuan := length(strYuan);

strYuanFen := TO_CHAR(FLOOR(Money * 100));

End If;

If strYuanFen = ‘0‘ Then

numLenYuanFen := 0;

Else

numLenYuanFen := length(strYuanFen);

End If;

If numLenYuan = 0 Or numLenYuanFen = 0 Then

strRst := ‘零圆整‘;

Return strRst;

End If;

tabNumMapping(0) := ‘零‘;

tabNumMapping(1) := ‘壹‘;

tabNumMapping(2) := ‘贰‘;

tabNumMapping(3) := ‘叁‘;

tabNumMapping(4) := ‘肆‘;

tabNumMapping(5) := ‘伍‘;

tabNumMapping(6) := ‘陆‘;

tabNumMapping(7) := ‘柒‘;

tabNumMapping(8) := ‘捌‘;

tabNumMapping(9) := ‘玖‘;

tabUnitMapping(-2) := ‘分‘;

tabUnitMapping(-1) := ‘角‘;

tabUnitMapping(1) := ‘‘;

tabUnitMapping(2) := ‘拾‘;

tabUnitMapping(3) := ‘佰‘;

tabUnitMapping(4) := ‘仟‘;

tabUnitMapping(5) := ‘万‘;

tabUnitMapping(6) := ‘拾‘;

tabUnitMapping(7) := ‘佰‘;

tabUnitMapping(8) := ‘仟‘;

tabUnitMapping(9) := ‘亿‘;

For i In 1 .. numLenYuan Loop

j            := numLenYuan - i + 1;

numUnitIndex := Mod(i, 8);

If numUnitIndex = 0 Then

numUnitIndex := 8;

End If;

If numUnitIndex = 1 And i > 1 Then

strRstYuan := tabUnitMapping(9) || strRstYuan;

End If;

charCurrentNum := substr(strYuan, j, 1);

If charCurrentNum <> 0 Then

strRstYuan := tabNumMapping(charCurrentNum) ||

tabUnitMapping(numUnitIndex) || strRstYuan;

Else

If (i = 1 Or i = 5) Then

If substr(strYuan, j - 3, 4) <> ‘0000‘ Then

strRstYuan := tabUnitMapping(numUnitIndex) || strRstYuan;

End If;

Else

If substr(strYuan, j + 1, 1) <> ‘0‘ Then

strRstYuan := tabNumMapping(charCurrentNum) || strRstYuan;

End If;

End If;

End If;

End Loop;

For i In -2 .. -1 Loop

j              := numLenYuan - i;

charCurrentNum := substr(strYuanFen, j, 1);

If charCurrentNum <> ‘0‘ Then

strRstFen := tabNumMapping(charCurrentNum) || tabUnitMapping(i) ||

strRstFen;

End If;

End Loop;

If strRstYuan Is Not Null Then

strRstYuan := strRstYuan || ‘圆‘;

End If;

If strRstFen Is Null Then

strRstYuan := strRstYuan || ‘整‘;

Elsif length(strRstFen) = 2 And substr(strRstFen, 2) = ‘角‘ Then

strRstFen := strRstFen || ‘整‘;

End If;

strRst := strRstYuan || strRstFen;

--strRst := Replace(strRst, ‘亿零‘, ‘亿‘);

--strRst := Replace(strRst, ‘万零‘, ‘万‘);

Return strRst;

End Money2Chinese;

(此文是转载,但已忘记转载出处)

时间: 2024-08-06 18:40:09

金额大写转小写SQL的相关文章

数字金额大写和小写转换

有非常多时候打印凭据的时候须要实现金额大写.比如 有多种写法来实现 比如一下几种 CREATE OR REPLACE FUNCTION chinese_number_program(p_input FLOAT) RETURN VARCHAR2 AS TYPE typ_money IS TABLE OF VARCHAR2(20); c_numbers typ_money := typ_money('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');

Oracle SQL 内置函数大全(转)

SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A         A      ZERO     SPACE--------- --------- --------- ---------65        97        48        32 2.CHR 给出整数,返回对应的字符;SQL> selec

SQL/PLSQL 之110个常用函数&lt;上&gt;:一定有你要找的

1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2. CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C -- 

[玩转SQL]:02 条件语句与排序

SELECT 更高的用法可以使用WHERE提供查询条件. WHERE语句 语法: SELECT * | {[DISTINCT] column|expression [alias]...} FROM   table [WHERE condition(s)]; 通过WHERE后边子句的表达返回True or False来判断是否满足条件. WHERE子句不可以使用别名. WHERE通常跟在FROM后边. --查询deparment_id为90的列 SELECT employee_id,last_na

SQL中的单记录函数

SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A         A      ZERO     SPACE--------- --------- --------- ---------       65        97        48        32 2.CHR给出整数,返回对应的字符;SQL> s

表名在数据库中的存储大写和小写略解

今天同事表示对于自己创建的表名是小写.在expdp的parfile中.include=view:"('view_name')",这个view_name用小写为什么提示: ORA-39168: Object path VIEW was not found. ORA-31655: no data or metadata objects selected for job 我表示建立视图的时候是小写,可是它存在数据字典中的时候,自己主动会变成大写.这是Oracle的存储方式. create t

69期-Java SE-031_MySQL-001-002 创建表、MySQL数据类型、数据的管理(数据库结构、数据表、数据)、SQL 函数

### 创建表 1.创建数据库 ```sql create database mstest default character set utf8 collate utf8_general_ci ``` 2.创建数据表 ```sql create table user( id int, name varchar(11) ) ``` Java 数据类型:基本数据类型 byte short int long double float boolean char ? 引用类型 MySQL 数据类型 - 整

MYSQL

 ****************************************安装mysql**************************************************** 1.mysql目录组成: 1.bin 可执行文件 2.data 存储数据文件 3.docs 文档 4.include 存储包含的头文件 5.lib 存储库文件 6.share 错误消息和字符集文件 配置文件 my.ini 添加环境变量(path) 2.启动mysql:net start mysql

Oracle分析函数

1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2. CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C --