oracle中文數字轉阿拉伯數字

來源:互聯網
上載者:User

標籤:中文數字轉阿拉伯數字

CREATE OR REPLACE FUNCTION chi2num(chivalue IN VARCHAR2) RETURN NUMBER IS

  TYPE MAP IS TABLE OF BINARY_INTEGER INDEX BY VARCHAR2(10);
  ling_jiu_map   MAP;
  shibaiqian_map MAP;
  wanyizhao_map  MAP;
  --臨時變數
  i            INT := 0; --‘臨時變數
  k            INT := 0; --臨時變數
  x            INT := 0; --臨時變數
  str          VARCHAR2(100) := ‘‘; --臨時變數
  tmp          INT := 0; --臨時變數
  tmp2         INT := 0; --臨時變數
  integer_part VARCHAR2(100) := ‘‘; --數字形式整數部分
  float_part   VARCHAR2(100) := ‘‘; --數字形式小數部分
  returnvalue  NUMBER := 0; --傳回值
BEGIN
  --初始化數組
  ling_jiu_map(‘零‘) := 0;
  ling_jiu_map(‘一‘) := 1;
  ling_jiu_map(‘二‘) := 2;
  ling_jiu_map(‘三‘) := 3;
  ling_jiu_map(‘四‘) := 4;
  ling_jiu_map(‘五‘) := 5;
  ling_jiu_map(‘六‘) := 6;
  ling_jiu_map(‘七‘) := 7;
  ling_jiu_map(‘八‘) := 8;
  ling_jiu_map(‘九‘) := 9;
  shibaiqian_map(‘‘) := 0;
  shibaiqian_map(‘十‘) := 1;
  shibaiqian_map(‘百‘) := 2;
  shibaiqian_map(‘千‘) := 3;
  wanyizhao_map(‘‘) := 0;
  wanyizhao_map(‘萬‘) := 1;
  wanyizhao_map(‘億‘) := 2;
  wanyizhao_map(‘兆‘) := 3;

  str := REGEXP_REPLACE(chivalue, ‘^十‘, ‘一十‘);
  str := REGEXP_REPLACE(str, ‘零十‘, ‘零一十‘);
  --將數字拆分為整數與浮點數兩個數字數組
  i := INSTR(str, ‘點‘, 1);

  IF i = 0 THEN
    integer_part := SUBSTR(str, 1);
  ELSE
    integer_part := SUBSTR(str, 1, i - 1);
    float_part   := SUBSTR(str, i + 1);
  END IF;

  --整型部分
  x    := LENGTH(integer_part);
  str  := ‘‘;
  tmp  := 0;
  tmp2 := 0;

  FOR k IN 1 .. x LOOP
    str := SUBSTR(integer_part, k, 1);
 
    IF str IN (‘萬‘, ‘億‘, ‘兆‘) THEN
      --當碰到萬億兆時
      tmp         := tmp + tmp2;
      returnvalue := returnvalue + tmp * POWER(10000, wanyizhao_map(str));
      tmp         := 0;
      tmp2        := 0;
    ELSIF str IN (‘十‘, ‘百‘, ‘千‘) THEN
      --當碰到十百千時
      tmp  := tmp + tmp2 * POWER(10, shibaiqian_map(str));
      tmp2 := 0;
    ELSE
      --當碰到數字時
      tmp2 := ling_jiu_map(str);
    END IF;
  END LOOP;

  --最後將沒有小於萬位元加到整數中去
  tmp         := tmp + tmp2;
  returnvalue := returnvalue + tmp;

  IF float_part IS NOT NULL THEN
    --計算小數部分
    k   := 0;
    tmp := ‘‘;
 
    FOR k IN 1 .. LENGTH(float_part) LOOP
      tmp := tmp || ling_jiu_map(SUBSTR(float_part, k, 1));
    END LOOP;
 
    returnvalue := returnvalue || ‘.‘ || tmp;
  END IF;

  RETURN returnvalue;
END;

650) this.width=650;" title="001.png" src="http://s4.51cto.com/wyfs02/M01/7F/78/wKiom1cfZLmw6ryhAAA-0INTaR0455.png" alt="wKiom1cfZLmw6ryhAAA-0INTaR0455.png" />

本文出自 “奮鬥的小蝸牛” 部落格,請務必保留此出處http://sparkkang.blog.51cto.com/11242173/1768030

oracle中文數字轉阿拉伯數字

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.