大小寫轉換函式(財務應用)
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(20) := '零壹貳叄肆伍陸柒捌玖';
sjin varchar2(50) := '分角圓拾佰仟萬拾佰仟億拾佰仟萬拾佰仟';
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;
result varchar2(100);
i pls_integer;
snum varchar2(20) := ltrim(replace(to_char(abs(je), '9999999999999990.99'), '.'));
len pls_integer := length(snum);
sch varchar2(20) := '零壹貳叄肆伍陸柒捌玖';
sjin varchar2(50) := '分角圓拾佰仟萬拾佰仟億拾佰仟萬拾佰仟';
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;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-22209/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- string大小寫轉換函式函式
- MySQL字串函式 字串大小寫轉換MySql字串函式
- 在LoadRunner中轉換字串大小寫的C語言函式字串C語言函式
- 字串-大小寫轉換字串
- 日期轉換函式的格式引數大小寫規則 (自yangtingkun)函式
- JavaScript字母大小寫轉換JavaScript
- JavaScript字串大小寫轉換JavaScript字串
- 英文大小寫轉換
- 使用正則 轉換大小寫
- javascript字串大小寫轉換效果JavaScript字串
- 金額大小寫轉換(3)
- js 轉換大小寫的方法JS
- 轉換函式函式
- 字串中大小寫轉換輸出字串
- Notepad++ 大小寫轉換
- linux命令列大小寫轉換Linux命令列
- Excel函式應用教程:函式的引數(轉)Excel函式
- PowerDesigner表名、列名大小寫轉換
- python 中字串大小寫轉換薦Python字串
- numtoyminterval函式——數字轉換函式函式
- 用ORACLE分析函式實現行列轉換Oracle函式
- Excel函式應用教程:函式的輸入方法(轉)Excel函式
- Excel函式應用教程:函式與公式的概念(轉)Excel函式公式
- 大小寫互換-"數字字串"轉換成數字字串
- 在 Linux 命令列中轉換大小寫Linux命令列
- Python中怎麼轉換字串大小寫Python字串
- 字串大小寫轉換和字串的比較字串
- MySQL-資料記錄大小寫轉換MySql
- CSS text-transform字元大小寫轉換CSSORM字元
- (C++字串大小寫轉換)相似的句子C++字串
- js如何進行字元大小寫轉換JS字元
- VB作業之字母大小寫的轉換
- 類的轉換函式函式
- php轉換ip函式PHP函式
- js日期轉換函式JS函式
- 四個PHP應用小函式 (轉)PHP函式
- 函式式 Java 到函式式 Kotlin 的轉換函式JavaKotlin
- 轉大寫函式MoneyCn函式