oracle 數量大寫函式

2021-07-14 08:32:22 字數 2964 閱讀 2365

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...