代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
PLSQL
】
人民币大写转换
作者:
亦菲
/ 发布于
2016/11/11
/
1158
CREATE OR REPLACE FUNCTION num2rmb(je NUMBER) RETURN VARCHAR2 IS result varchar2(100); i pls_integer; snum varchar2(20) := ltrim(replace(to_char(abs(je), '9999999999999990.99'), '.')); len pls_integer := length(snum); sch varchar2(40) := '零壹贰叁肆伍陆柒捌玖'; sjin varchar2(150) := '分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟'; srmb varchar2(100):= ''; num pls_integer; jin varchar(2); s_num pls_integer := 0; --'0'起始位置 e_num pls_integer := 0; --'0'结束位置 begin for i in 1..len loop num := to_number(substr(snum, i, 1)); if num <> 0 then --非'0'时处理: if s_num = 0 then srmb := srmb||substr(sch, num + 1, 1)||substr(sjin, len - i + 1, 1); --前面字符非'0', 正常联接... else srmb := srmb|| --否则: case when s_num = e_num then --前面只有一个'0' case s_num when 7 then '万' --只处理进位 when 11 then '亿' when 15 then '万' end when e_num < 12 then --否则(多个'0'处理) case when s_num < 7 then '' --万以内.. when s_num < 11 then case when e_num < 8 and s_num < 10 then '万' end when s_num < 15 then case when e_num < 12 then '亿' end else '万亿' end when e_num < 16 and s_num > 14 then '万' end|| case when s_num > 3 and e_num < 3 then '圆零' when e_num = 3 then '圆' when e_num not in (7, 11, 15) or s_num - e_num > 2 then '零' end; srmb := srmb||substr(sch, num + 1, 1)||substr(sjin, len - i + 1, 1); end if; s_num := 0; e_num := 0; else if s_num = 0 then --当s_num = 0时'0'串起始, s_num := len - i + 1; --记录开始 e_num := s_num; --各结整位置。 else e_num := len - i + 1; --否则新的结整位置。 end if; end if; end loop; if s_num <>0 then --此时以'0'结尾 srmb := srmb|| case when s_num = len then '零圆整' --全'0'串,加... when s_num = 1 or s_num = 2 then '整' --分(1),角(2)后加... when s_num < 7 or s_num = 10 then '圆整' when s_num <11 then '万圆整' when s_num <15 then '亿圆整' else '万亿圆整' end; else srmb := srmb||'整'; --不以'0'结尾,加... end if; if je < 0 then srmb:='负'||srmb; end if; RETURN srmb; end num2rmb; SQL> select num2rmb(12.345) as 大写 from dual; 大写 --------------------------------- 壹拾贰圆叁角伍分整 -------------------------------------------------------练习1-------------------------------------------- SQL> create table tb_shop_sell 2 ( 3 id number primary key, 4 shopid varchar2(10) not null, 5 price number(6,2) not null, 6 quantity number(2) not null 7 ); Table created SQL> insert into tb_shop_sell values(1,'s001',1200,1); 1 row inserted SQL> insert into tb_shop_sell values(2,'s002',1300,1); 1 row inserted SQL> insert into tb_shop_sell values(3,'s003',23.4,3); 1 row inserted SQL> insert into tb_shop_sell values(4,'s004',73.4,2); 1 row inserted SQL> insert into tb_shop_sell values(5,'s005',23,1); 1 row inserted SQL> create view v_sell 2 as 3 select 4 shopid 商品编号, 5 price 商品单价, 6 quantity 数量, 7 price*quantity 销售总额, 8 num2rmb(price*quantity) 销售总额大写 9 from tb_shop_sell; SQL> select * from v_sell; 商品编号 商品单价 数量 销售总额 销售总额大写 ---------- -------- ---- ---------- --------------------------------- s001 1200.00 1 1200 壹仟贰佰圆整 s002 1300.00 1 1300 壹仟叁佰圆整 s003 23.40 3 70.2 柒拾圆贰角整 s004 73.40 2 146.8 壹佰肆拾陆圆捌角整 s005 23.00 1 23 贰拾叁圆整
试试其它关键字
同语言下
.
查看某张表的表结构
.
oracle 集合操作
.
for 循环中倒序 用reverse
.
Oracle 临时表空间收缩
.
查看session及其对应运行的sql
.
Oracle常用查看表结构命令
.
Oracle Connect By Prior用法(实现递归查询)
.
重置排序 SEQUENCE
.
创建一个trigger
.
批量替换字段中的字符
可能有用的
.
查看某张表的表结构
.
oracle 集合操作
.
for 循环中倒序 用reverse
.
Oracle 临时表空间收缩
.
查看session及其对应运行的sql
.
Oracle常用查看表结构命令
.
Oracle Connect By Prior用法(实现递归查询)
.
重置排序 SEQUENCE
.
创建一个trigger
.
批量替换字段中的字符
亦菲
贡献的其它代码
(
24
)
.
输入数字运行相应命令
.
输入时间参数计算年龄
.
sql查询一个字段包含另一个字段内容
.
利用Runtime执行多条linux命令
.
将"字符串"以下划线分割首字母大写
.
遍历获取JSONObject的所有Key
.
通过T-SQL脚本查询表的所有外键
.
图片与byte相互转换
.
导入指定位置文件夹内文件,并移动到指定网站文件夹内
.
udf获取当前月最后一天
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3