function convert_quantity(p_digit in number) return varchar2 is
l_left_str varchar2(100); ---左邊字串
l_right_str varchar2(100); ---右邊字串
l_unit_str varchar2(100); ---位
l_number_str varchar2(100);
l_vt varchar2(1000);
l_vn number;
l_left_length number; ---左邊字元長度
i number;
n number;
m number;
l_new_digit number;
l_speech varchar2(50);
l_amount_format varchar2(50);
begin
l_left_str := null;
l_right_str := null;
l_unit_str := '拾佰仟萬拾佰仟億拾佰仟';
l_number_str := '壹貳叄肆伍陸柒捌玖';
m := 1;
l_new_digit := to_char(p_digit);
i := 1;
l_vt := null;
if p_digit = 0 then
return '零';
end if;
if instr(l_new_digit, '.') = 0 then
l_left_str := l_new_digit;
l_right_str := null;
elsif instr(l_new_digit, '.') = 1 then
l_speech := '零';
l_right_str := substr(l_new_digit, instr(l_new_digit, '.') + 1, length(l_new_digit) - instr(l_new_digit, '.'));
else
l_left_str := substr(l_new_digit, 1, instr(l_new_digit, '.') - 1);
l_right_str := substr(l_new_digit, instr(l_new_digit, '.') + 1, length(l_new_digit) - instr(l_new_digit, '.'));
end if;
if l_left_str is not null then
l_left_length := length(l_left_str);
if l_left_length <= 8 then
n := l_left_length;
while i <= l_left_length - 1 loop
l_vn := to_number(substr(l_left_str, i, 1));
if l_vn >= 1 then
if m = 0 then
l_vt := l_vt || '零';
end if;
l_vt := l_vt || substr(l_number_str, l_vn, 1) || substr(l_unit_str, n - 1, 1);
m := 1;
else
if n = 5 then
l_vt := l_vt || '萬';
m := 1;
else
m := 0;
end if;
end if; --end 零
i := i + 1;
n := n - 1;
end loop;
l_vn := to_number(substr(l_left_str, l_left_length, 1));
if l_vn > 0 then
if m = 0 then
l_vt := l_vt || '零';
end if;
l_vt := l_vt || substr(l_number_str, l_vn, 1);
end if;
if to_number(substr(l_left_str, 1, 1)) = 0 or l_left_length is null then
l_vt := l_vt || '零';
end if;
l_speech := l_speech || l_vt;
else
return '數量過大,不允許數量過億';
end if;
end if;
l_vt := null;
if length(l_right_str) >= 1 then
l_vt := '點';
i := 1;
while i <= length(l_right_str) loop
l_vn := to_number(substr(l_right_str, i, 1));
if l_vn = 0 then
l_vt := l_vt || '零';
else
l_vt := l_vt || substr(l_number_str, l_vn, 1);
end if;
i := i + 1;
end loop;
end if;
l_speech := l_speech || l_vt;
return l_speech;
end;
go 變數大寫 Go語言字串大寫轉小寫
go語言字串大寫轉小寫教程 在開發過程中,很多時候我們需要將乙個 strings.tolower 函式 語法func tolower s string string 引數引數描述s 原字串。返回值將字串 s 轉成小寫,並返回。案例將字串轉成小寫 使用 tolower 函式,將字串轉成小寫 packa...
go 變數大寫 go語言 變數與常量
變數 一 變數注意事項 變數名首字母大寫,可以被其他包訪問呼叫 公有 變數名首字母小寫,其他包不能訪問和呼叫 私有 在同乙個域裡乙個變數只能定義一次,不可重複定義 二 變數的宣告的種方式 1 先宣告後賦值 關鍵字 變數名 變數型別 var a int 變數名 值 a 10 賦值需要在函式體裡 2 宣...
oracle 金額大寫轉換
function convert money input number number return varchar2 is i pls integer snum varchar2 20 ltrim replace to char abs input number 9999999999999990.9...