將漢字轉為阿拉伯數字(oracle函式方式)

2021-10-06 06:56:23 字數 3200 閱讀 1267

之前因公司業務需求,需要將錄入的漢字自動轉為阿拉伯數字存放到資料庫中,網上有好多阿拉伯數字轉為漢字的且正確的。但是漢字轉為阿拉伯數字的卻很少有正確的 。下面是正確的oracle函式,可正確轉換漢字。(可轉14位數左右,更大的數轉換會有問題。)

create or replace function chinesetonum (chival in varchar2) return number

astype str_array is table of varchar2(10) index by binary_integer;

type num_array is table of number index by binary_integer;

type num_map is table of number index by varchar2(10);

rmb_numbers num_map;

unit_numbers str_array;

big_unit_numbers str_array;

unit_val_numbers num_array;

result number :=0;

i integer;

ind integer := -1;

money varchar2(200) ;

pre_money varchar2(200) ;

n number;

begin

rmb_numbers('一') := 1;

rmb_numbers('二') := 2;

rmb_numbers('三') := 3;

rmb_numbers('四') := 4;

rmb_numbers('五') := 5;

rmb_numbers('六') := 6;

rmb_numbers('七') := 7;

rmb_numbers('八') := 8;

rmb_numbers('九') := 9;

rmb_numbers('零') := 0;

rmb_numbers('壹') := 1;

rmb_numbers('貳') := 2;

rmb_numbers('叄') := 3;

rmb_numbers('肆') := 4;

rmb_numbers('伍') := 5;

rmb_numbers('陸') := 6;

rmb_numbers('柒') := 7;

rmb_numbers('捌') := 8;

rmb_numbers('玖') := 9;

rmb_numbers('整') := 0;

unit_numbers(1) := '億';

unit_numbers(2) := '萬';

unit_numbers(3) := '千';

unit_numbers(4) := '百';

unit_numbers(5) := '十';

unit_numbers(6) := '元';

unit_numbers(7) := '角';

unit_numbers(8) := '分';

unit_numbers(9) := '釐';

big_unit_numbers(1) := '億';

big_unit_numbers(2) := '萬';

big_unit_numbers(3) := '仟';

big_unit_numbers(4) := '佰';

big_unit_numbers(5) := '拾';

big_unit_numbers(6) := '圓';

big_unit_numbers(7) := '角';

big_unit_numbers(8) := '分';

big_unit_numbers(9) := '釐';

unit_val_numbers(1) := 100000000;

unit_val_numbers(2) := 10000;

unit_val_numbers(3) := 1000;

unit_val_numbers(4) := 100;

unit_val_numbers(5) := 10;

unit_val_numbers(6) := 1;

unit_val_numbers(7) := 0.1;

unit_val_numbers(8) := 0.01;

unit_val_numbers(9) := 0.001;

money:= chival;

if (money is null ) then

return result;

end if;

-- 9 是計量單位的長度

for i in 1..unit_numbers.count loop

ind := instr(money, unit_numbers(i), -1 , 1);

if ( ind = 0 ) then

ind := instr(money, big_unit_numbers(i), -1 , 1);

end if;

if ( ind > 0 ) then

pre_money := substr(money,1,ind -1);

money := substr(money,ind + 1);

if ( pre_money is null and unit_val_numbers(i) = 10 ) then

result := result + unit_val_numbers(i);

else

result := result + chi2num(pre_money) * unit_val_numbers(i);

end if;

end if;

end loop;

if (money is not null ) then

n := rmb_numbers(money);

if ( n is not null) then

result := result + n;

end if;

end if;

return result;

end;

阿拉伯數字轉成漢字

做乙個中醫專案時後台返回是阿拉伯數字,專案需求是需要轉化為中文數字,記錄一下轉化方法,感覺要比那種switch.case.拓展性好一點。因為當時不會超過一千,所以就寫到了百位,其他需求可以自行更改一下。當然預設傳的是整數型別的。public class numbertochineseutil str...

將阿拉伯數字轉為中文數字讀法

本文提供八位數以內的轉換,八位數以上可以自行修改。例如 10 十 1002 一千零二 100021 十萬零二十一 1111111 一百一十一萬一千一百一十一 package com.huang.number created by huangguojun on 2018 11 10.public cl...

Python 將中文大寫數字轉為阿拉伯數字

平時會碰到把中文大寫的金額轉為阿拉伯數字,比如叄仟伍佰陸拾玖元肆角需要轉為3569.4,嘗試編寫函式如下 def convert igit cn num cn unit regex re.compile r 一二三四五六七 零壹貳叄肆伍陸柒捌玖貮兩十拾百佰千仟萬萬億億兆元角分 regex.searc...