oracle、MySQL日期轉XX年XX月XX日日期格式和金錢轉中文大寫數字的方法

你知道的越多,你不知道的越多
點贊再看,養成習慣
如果您有疑問或者見解,歡迎指教:
企鵝:869192208

問題

  1. 工作中遇到一些項目需要打印文書,出具文書的日期,客戶希望做成XX年XX月XX日的格式,由於目前用的是自研的文書系統,需要通過 sql 來實現格式的轉換。
  2. 有些金額,需要轉成大寫的數字。

解決方案

  1. ORACLE 數據庫格式化日期格式爲XX年XX月XX日

下面案例的 lzcity_approve_control_info 表 begin_date 字段類型爲 DATE

select to_char(a.begin_date,'yyyy')||'年'||to_char(a.begin_date,'MM')||'月'||to_char(a.begin_date,'dd')||'日' begin_date from lzcity_approve_control_info a

oracle日期轉換XX年XX月XX日
2. MySql 數據庫格式化日期格式爲XX年XX月XX日

select DATE_FORMAT(NOW(),'%Y年%m月%d日');

mysql日期轉換XX年XX月XX日
3. ORACLE 數字轉大寫金額

CREATE OR REPLACE FUNCTION NUMBER_TO_CHINESE(P_NUM IN NUMBER DEFAULT NULL)
  RETURN NVARCHAR2 IS
  /*Ver:1.0 Created By xsb on 2003-8-18 For:
  將金額數字(單位元)轉換爲大寫(採用從低至高算法)
  數字整數部分不得超過16位,可以是負數。
  Ver:1.1 Modified By xsb on 2003-8-20 For:個位數處理也放在For循環中。
  Ver:1.2 Modified By xsb on 2003-8-22 For:分後不帶整字。
  Ver:1.3 Modified By xsb on 2003-8-28 For:完善測試用例。
  測試用例:
  SET HEAD OFF
  SET FEED OFF
  select '無參數時='||NUMBER_TO_CHINESE() from dual;
  select 'null='||NUMBER_TO_CHINESE(null) from dual;
  select '0='||NUMBER_TO_CHINESE(0) from dual;
  select '0.01='||NUMBER_TO_CHINESE(0.01) from dual;
  select '0.126='||NUMBER_TO_CHINESE(0.126) from dual;
  select '01.234='||NUMBER_TO_CHINESE(01.234) from dual;
  select '10='||NUMBER_TO_CHINESE(10) from dual;
  select '100.1='||NUMBER_TO_CHINESE(100.1) from dual;
  select '100.01='||NUMBER_TO_CHINESE(100.01) from dual;
  select '10000='||NUMBER_TO_CHINESE(10000) from dual;
  select '10012.12='||NUMBER_TO_CHINESE(10012.12) from dual;
  select '20000020.01='||NUMBER_TO_CHINESE(20000020.01) from dual;
  select '3040506708.901='||NUMBER_TO_CHINESE(3040506708.901) from dual;
  select '40005006078.001='||NUMBER_TO_CHINESE(40005006078.001) from dual;
  select '-123456789.98='||NUMBER_TO_CHINESE(-123456789.98) from dual;
  select '123456789123456789.89='||NUMBER_TO_CHINESE(123456789123456789.89) from dual;
  test
  */
  RESULT      NVARCHAR2(100); --返回字符串
  NUM_ROUND   NVARCHAR2(100) := TO_CHAR(ABS(ROUND(P_NUM, 2))); --轉換數字爲小數點後2位的字符(正數)
  NUM_LEFT    NVARCHAR2(100); --小數點左邊的數字
  NUM_RIGHT   NVARCHAR2(2); --小數點右邊的數字
  STR1        NCHAR(10) := '零壹貳叄肆伍陸柒捌玖'; --數字大寫
  STR2        NCHAR(16) := '元拾佰仟萬拾佰仟億拾佰仟萬拾佰仟'; --數字位數(從低至高)
  NUM_PRE     NUMBER(1) := 1; --前一位上的數字
  NUM_CURRENT NUMBER(1); --當前位上的數字
  NUM_COUNT   NUMBER := 0; --當前數字位數
  NUM1        NUMBER;

BEGIN
  IF P_NUM IS NULL THEN
    RETURN NULL;
  END IF; --轉換數字爲null時返回null

  SELECT TO_CHAR(NVL(SUBSTR(TO_CHAR(NUM_ROUND),
                            1,
                            DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),
                                   0,
                                   LENGTH(NUM_ROUND),
                                   INSTR(TO_CHAR(NUM_ROUND), '.') - 1)),
                     0))
    INTO NUM_LEFT
    FROM DUAL; --取得小數點左邊的數字
  SELECT SUBSTR(TO_CHAR(NUM_ROUND),
                DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),
                       0,
                       LENGTH(NUM_ROUND) + 1,
                       INSTR(TO_CHAR(NUM_ROUND), '.') + 1),
                2)
    INTO NUM_RIGHT
    FROM DUAL; --取得小數點右邊的數字
  SELECT CASE
           WHEN LENGTH(NUM_LEFT) >= 8 THEN
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT), -8, 4))
           ELSE
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT),
                             -LENGTH(NUM_LEFT),
                             LENGTH(NUM_LEFT) - 4))
         END
    INTO NUM1
    FROM DUAL; ---取得千、百、十、萬位上的數字
  IF LENGTH(NUM_LEFT) > 16 THEN
    RETURN '**********';
  END IF; --數字整數部分超過16位時

  --採用從低至高的算法,先處理小數點右邊的數字
  IF LENGTH(NUM_RIGHT) = 2 THEN
    IF TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) = 0 THEN
      RESULT := '零' ||
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';
    ELSE
      RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角' ||
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';
    END IF;
  ELSIF LENGTH(NUM_RIGHT) = 1 THEN
    RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角整';
  ELSE
    RESULT := '整';
  END IF;
  --再處理小數點左邊的數字
  FOR I IN REVERSE 1 .. LENGTH(NUM_LEFT) LOOP
    --(從低至高)
    NUM_COUNT   := NUM_COUNT + 1; --當前數字位數
    NUM_CURRENT := TO_NUMBER(SUBSTR(NUM_LEFT, I, 1)); --當前位上的數字
    IF NUM_CURRENT > 0 THEN
      --當前位上數字不爲0按正常處理
      RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) ||
                SUBSTR(STR2, NUM_COUNT, 1) || RESULT;
    ELSE
      --當前位上數字爲0時
      IF NUM_COUNT = 5 THEN
        IF MOD(NUM_COUNT - 1, 4) = 0 AND NUM1 <> 0 THEN
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;
          NUM_PRE := 0; --元、萬,億前不準加零 --當前位是元、萬或億時
        END IF;
      ELSE
        IF MOD(NUM_COUNT - 1, 4) = 0 THEN
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;
          NUM_PRE := 0; --元、萬,億前不準加零
        END IF;
      END IF;
      IF NUM_PRE > 0 OR LENGTH(NUM_LEFT) = 1 THEN
        --上一位數字不爲0或只有個位時
        RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) || RESULT;
      END IF;
    END IF;
    NUM_PRE := NUM_CURRENT;
  END LOOP;

  IF P_NUM < 0 THEN
    --轉換數字是負數時
    RESULT := '負' || RESULT;
  END IF;

  RETURN RESULT;

EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20001, '數字轉換大寫出現錯誤!' || SQLERRM);
END;

下面案例的 appr_pay_order 表的 PN_AMOUNT 字段和 PN_OVERDUE_AMT 字段類型都是 NUMBER(16,2)

select NUMBER_TO_CHINESE(apo.PN_AMOUNT) PN_AMOUNT, NUMBER_TO_CHINESE(apo.PN_OVERDUE_AMT) PN_OVERDUE_AMT from appr_pay_order apo

oracle 數字轉大寫金額4. MySql 數字轉大寫金額

set character set utf8;

DELIMITER $$;

DROP FUNCTION IF EXISTS `to_china_num`;

CREATE FUNCTION `to_china_num`(MONEY decimal(14,2)) RETURNS varchar(150) CHARSET utf8
BEGIN
	declare RV_MONEY0 VARCHAR(20);
	declare RV_MONEY1 VARCHAR(4);
	declare RV_MONEY2 VARCHAR(4);
	declare V_MONEY0 VARCHAR(28);
	declare V_MONEY1 VARCHAR(4);
	declare V_MONEY2 VARCHAR(4);
	declare V_MONEY3 VARCHAR(4);
	declare V_MONEY4 VARCHAR(4);
	declare V_MONEY5 VARCHAR(4);
	declare V_MONEY6 VARCHAR(4);
	declare V_MONEY7 VARCHAR(4);
	declare V_MONEY8 VARCHAR(4);
	declare V_MONEY9 VARCHAR(4);
	declare V_MONEY10 VARCHAR(4);
	declare V_MONEY11 VARCHAR(4);
	declare V_MONEY12 VARCHAR(4);
	declare RPV_MONEY1 VARCHAR(4);
	declare RPV_MONEY2 VARCHAR(4);
	declare PV_MONEY0 VARCHAR(14);
	declare PV_MONEY1 VARCHAR(4);
	declare PV_MONEY2 VARCHAR(4);
	declare PV_MONEY3 VARCHAR(4);
	declare PV_MONEY4 VARCHAR(4);
	declare PV_MONEY5 VARCHAR(4);
	declare PV_MONEY6 VARCHAR(4);
	declare PV_MONEY7 VARCHAR(4);
	declare PV_MONEY8 VARCHAR(4);
	declare PV_MONEY9 VARCHAR(4);
	declare PV_MONEY10 VARCHAR(4);
	declare PV_MONEY11 VARCHAR(4);
	declare PV_MONEY12 VARCHAR(4);
	declare Z_MONEY VARCHAR(28);
	set Z_MONEY=FLOOR(MONEY);
	set V_MONEY0=LTRIM(RTRIM(Z_MONEY));
	set Z_MONEY=FLOOR(MONEY*100);
	set RV_MONEY0=LTRIM(RTRIM(Z_MONEY));
	set RV_MONEY1=SUBSTR(RV_MONEY0,LENGTH(RV_MONEY0),1);
	IF LENGTH(RV_MONEY0)>1 THEN
		set RV_MONEY2=SUBSTR(RV_MONEY0,LENGTH(RV_MONEY0)-1,1);
	ELSE
		set RV_MONEY2='0';
	END IF;
	set V_MONEY1=SUBSTR(V_MONEY0,LENGTH(V_MONEY0),1);
	IF LENGTH(V_MONEY0)-1>0 THEN
		set V_MONEY2=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-1,1);
	ELSE
		set V_MONEY2='0';
	END IF;
	IF LENGTH(V_MONEY0)-2>0 THEN
		set V_MONEY3=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-2,1);
	ELSE 
		set V_MONEY3='0';
	END IF;
	IF LENGTH(V_MONEY0)-3>0 THEN
		set V_MONEY4=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-3,1);
	ELSE
		set V_MONEY4='0';
	END IF;
	IF LENGTH(V_MONEY0)-4>0 THEN
		set V_MONEY5=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-4,1);
	ELSE
		set V_MONEY5='0';
	END IF;
	IF LENGTH(V_MONEY0)-5>0 THEN
		set V_MONEY6=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-5,1);
	ELSE
		set V_MONEY6='0';
	END IF;
	IF LENGTH(V_MONEY0)-6>0 THEN
		set V_MONEY7=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-6,1);
	ELSE
		set V_MONEY7='0';
	END IF;
	IF LENGTH(V_MONEY0)-7>0 THEN
		set V_MONEY8=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-7,1);
	ELSE
		set V_MONEY8='0';
	END IF;
	IF LENGTH(V_MONEY0)-8>0 THEN
		set V_MONEY9=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-8,1);
	ELSE
		set V_MONEY9='0';
	END IF;
	IF LENGTH(V_MONEY0)-9>0 THEN
		set V_MONEY10=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-9,1);
	ELSE
		set V_MONEY10='0';
	END IF;
	IF LENGTH(V_MONEY0)-10>0 THEN
		set V_MONEY11=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-10,1);
	ELSE
		set V_MONEY11='0';
	END IF;
	IF LENGTH(V_MONEY0)-11>0 THEN
		set V_MONEY12=SUBSTR(V_MONEY0,LENGTH(V_MONEY0)-11,1);
	ELSE
		set V_MONEY12='0';
	END IF;
	select if(RV_MONEY1='0','零分',if(RV_MONEY1='1','壹分',if(RV_MONEY1='2','貳分',if(RV_MONEY1='3','叄分',
	if(RV_MONEY1='4','肆分',if(RV_MONEY1='5','伍分',if(RV_MONEY1='6','陸分',if(RV_MONEY1='7','柒分',if(
	RV_MONEY1='8','捌分','玖分'))))))))) into rpv_money1;
	select if(RV_MONEY2='0','零角',if(RV_MONEY2='1','壹角',if(RV_MONEY2='2','貳角',if(RV_MONEY2='3','叄角',
	if(RV_MONEY2='4','肆角',if(RV_MONEY2='5','伍角',if(RV_MONEY2='6','陸角',if(RV_MONEY2='7','柒角',if(
	RV_MONEY2='8','捌角','玖角'))))))))) into rpv_money2;
	select if(V_MONEY1='0','元',if(V_MONEY1='1','壹元',if(V_MONEY1='2','貳元',if(V_MONEY1='3','叄元',
	if(V_MONEY1='4','肆元',if(V_MONEY1='5','伍元',if(V_MONEY1='6','陸元',if(V_MONEY1='7','柒元',if(
	V_MONEY1='8','捌元','玖元'))))))))) into pv_money1;
	select if(V_MONEY2='0','',if(V_MONEY2='1','壹拾',if(V_MONEY2='2','貳拾',if(V_MONEY2='3','叄拾',
	if(V_MONEY2='4','肆拾',if(V_MONEY2='5','伍拾',if(V_MONEY2='6','陸拾',if(V_MONEY2='7','柒拾',if(
	V_MONEY2='8','捌拾','玖拾'))))))))) into pv_money2;
	select if(V_MONEY3='0','',if(V_MONEY3='1','壹佰',if(V_MONEY3='2','貳佰',if(V_MONEY3='3','叄佰',
	if(V_MONEY3='4','肆佰',if(V_MONEY3='5','伍佰',if(V_MONEY3='6','陸佰',if(V_MONEY3='7','柒佰',if(
	V_MONEY3='8','捌佰','玖佰'))))))))) into pv_money3;
	select if(V_MONEY4='0','',if(V_MONEY4='1','壹仟',if(V_MONEY4='2','貳仟',if(V_MONEY4='3','叄仟',
	if(V_MONEY4='4','肆仟',if(V_MONEY4='5','伍仟',if(V_MONEY4='6','陸仟',if(V_MONEY4='7','柒仟',if(
	V_MONEY4='8','捌仟','玖仟'))))))))) into pv_money4;
	select if(V_MONEY5='0','萬',if(V_MONEY5='1','壹萬',if(V_MONEY5='2','貳萬',if(V_MONEY5='3','叄萬',
	if(V_MONEY5='4','肆萬',if(V_MONEY5='5','伍萬',if(V_MONEY5='6','陸萬',if(V_MONEY5='7','柒萬',if(
	V_MONEY5='8','捌萬','玖萬'))))))))) into pv_money5;
	select if(V_MONEY6='0','',if(V_MONEY6='1','壹拾',if(V_MONEY6='2','貳拾',if(V_MONEY6='3','叄拾',
	if(V_MONEY6='4','肆拾',if(V_MONEY6='5','伍拾',if(V_MONEY6='6','陸拾',if(V_MONEY6='7','玖拾',if(
	V_MONEY6='8','捌拾','玖萬'))))))))) into pv_money6;
	select if(V_MONEY7='0','',if(V_MONEY7='1','壹佰',if(V_MONEY7='2','貳佰',if(V_MONEY7='3','叄佰',
	if(V_MONEY7='4','肆佰',if(V_MONEY7='5','伍佰',if(V_MONEY7='6','陸佰',if(V_MONEY7='7','柒佰',if(
	V_MONEY7='8','捌佰','玖佰'))))))))) into pv_money7;
	select if(V_MONEY8='0','',if(V_MONEY8='1','壹仟',if(V_MONEY8='2','貳仟',if(V_MONEY8='3','叄仟',
	if(V_MONEY8='4','肆仟',if(V_MONEY8='5','伍仟',if(V_MONEY8='6','陸仟',if(V_MONEY8='7','柒仟',if(
	V_MONEY8='8','捌仟','玖仟'))))))))) into pv_money8;
	select if(V_MONEY9='0','億',if(V_MONEY9='1','壹億',if(V_MONEY9='2','貳億',if(V_MONEY9='3','叄億',
	if(V_MONEY9='4','肆億',if(V_MONEY9='5','伍億',if(V_MONEY9='6','陸億',if(V_MONEY9='7','柒億',if(
	V_MONEY9='8','捌億','玖億'))))))))) into pv_money9;
	select if(V_MONEY10='0','',if(V_MONEY10='1','壹拾',if(V_MONEY10='2','貳拾',if(V_MONEY10='3','叄拾',
	if(V_MONEY10='4','肆拾',if(V_MONEY10='5','伍拾',if(V_MONEY10='6','陸拾',if(V_MONEY10='7','玖拾',if(
	V_MONEY10='8','捌拾','玖萬'))))))))) into pv_money10;
	select if(V_MONEY11='0','',if(V_MONEY11='1','壹佰',if(V_MONEY11='2','貳佰',if(V_MONEY11='3','叄佰',
	if(V_MONEY11='4','肆佰',if(V_MONEY11='5','伍佰',if(V_MONEY11='6','陸佰',if(V_MONEY11='7','柒佰',if(
	V_MONEY11='8','捌佰','玖佰'))))))))) into pv_money11;
	select if(V_MONEY12='0','',if(V_MONEY12='1','壹仟',if(V_MONEY12='2','貳仟',if(V_MONEY12='3','叄仟',
	if(V_MONEY12='4','肆仟',if(V_MONEY12='5','伍仟',if(V_MONEY12='6','陸仟',if(V_MONEY12='7','柒仟',if(
	V_MONEY12='8','捌仟','玖仟'))))))))) into pv_money12;
	if RPV_MONEY2 = '零角' AND RPV_MONEY1 = '零分' THEN
		set V_MONEY0=CONCAT(PV_MONEY12,PV_MONEY11,PV_MONEY10,PV_MONEY9,PV_MONEY8,PV_MONEY7,PV_MONEY6,PV_MONEY5,PV_MONEY4,
		PV_MONEY3,PV_MONEY2,PV_MONEY1,'整');
	else
		set V_MONEY0=CONCAT(PV_MONEY12,PV_MONEY11,PV_MONEY10,PV_MONEY9,PV_MONEY8,PV_MONEY7,PV_MONEY6,PV_MONEY5,PV_MONEY4,
		PV_MONEY3,PV_MONEY2,PV_MONEY1,RPV_MONEY2,RPV_MONEY1);
	END IF;
	
	if SUBSTR(V_MONEY0,1,1)='億' then
		set V_MONEY0=SUBSTR(V_MONEY0,2,LENGTH(V_MONEY0)-1);
	end if;
	if SUBSTR(V_MONEY0,1,1)='萬' then
		set V_MONEY0=SUBSTR(V_MONEY0,2,LENGTH(V_MONEY0)-1);
	end if;
/* 判斷億和萬之間間隔的位數 locate */
	set V_MONEY0=REPLACE(V_MONEY0,'億萬','億');
/* 判斷億和元之間間隔的位數 locate */
	if locate('元',V_MONEY0)-locate('億',V_MONEY0)=2 then
		set V_MONEY0=REPLACE(V_MONEY0,'億壹','億零壹');
		set V_MONEY0=REPLACE(V_MONEY0,'億貳','億零貳');
		set V_MONEY0=REPLACE(V_MONEY0,'億叄','億零叄');
		set V_MONEY0=REPLACE(V_MONEY0,'億肆','億零肆');
		set V_MONEY0=REPLACE(V_MONEY0,'億伍','億零伍');
		set V_MONEY0=REPLACE(V_MONEY0,'億陸','億零陸');
		set V_MONEY0=REPLACE(V_MONEY0,'億柒','億零柒');
		set V_MONEY0=REPLACE(V_MONEY0,'億捌','億零捌');
		set V_MONEY0=REPLACE(V_MONEY0,'億玖','億零玖');
	end if;
	set V_MONEY0=REPLACE(V_MONEY0,'億壹拾','億零壹拾');
	set V_MONEY0=REPLACE(V_MONEY0,'億貳拾','億零貳拾');
	set V_MONEY0=REPLACE(V_MONEY0,'億叄拾','億零叄拾');
	set V_MONEY0=REPLACE(V_MONEY0,'億肆拾','億零肆拾');
	set V_MONEY0=REPLACE(V_MONEY0,'億伍拾','億零伍拾');
	set V_MONEY0=REPLACE(V_MONEY0,'億陸拾','億零陸拾');
	set V_MONEY0=REPLACE(V_MONEY0,'億柒拾','億零柒拾');
	set V_MONEY0=REPLACE(V_MONEY0,'億捌拾','億零捌拾');
	set V_MONEY0=REPLACE(V_MONEY0,'億玖拾','億零玖拾');
	set V_MONEY0=REPLACE(V_MONEY0,'億壹佰','億零壹佰');
	set V_MONEY0=REPLACE(V_MONEY0,'億貳佰','億零貳佰');
	set V_MONEY0=REPLACE(V_MONEY0,'億叄佰','億零叄佰');
	set V_MONEY0=REPLACE(V_MONEY0,'億肆佰','億零肆佰');
	set V_MONEY0=REPLACE(V_MONEY0,'億伍佰','億零伍佰');
	set V_MONEY0=REPLACE(V_MONEY0,'億陸佰','億零陸佰');
	set V_MONEY0=REPLACE(V_MONEY0,'億柒佰','億零柒佰');
	set V_MONEY0=REPLACE(V_MONEY0,'億捌佰','億零捌佰');
	set V_MONEY0=REPLACE(V_MONEY0,'億玖佰','億零玖佰');
/* 判斷最後一個萬和元之間間隔的位數 */
	if locate('元',V_MONEY0)-locate('萬',V_MONEY0)=2 then
		set V_MONEY0=REPLACE(V_MONEY0,'萬壹','萬零壹');
		set V_MONEY0=REPLACE(V_MONEY0,'萬貳','萬零貳');
		set V_MONEY0=REPLACE(V_MONEY0,'萬叄','萬零叄');
		set V_MONEY0=REPLACE(V_MONEY0,'萬肆','萬零肆');
		set V_MONEY0=REPLACE(V_MONEY0,'萬伍','萬零伍');
		set V_MONEY0=REPLACE(V_MONEY0,'萬陸','萬零陸');
		set V_MONEY0=REPLACE(V_MONEY0,'萬柒','萬零柒');
		set V_MONEY0=REPLACE(V_MONEY0,'萬捌','萬零捌');
		set V_MONEY0=REPLACE(V_MONEY0,'萬玖','萬零玖');
	end if;
	set V_MONEY0=REPLACE(V_MONEY0,'萬壹拾','萬零壹拾');
	set V_MONEY0=REPLACE(V_MONEY0,'萬貳拾','萬零貳拾');
	set V_MONEY0=REPLACE(V_MONEY0,'萬叄拾','萬零叄拾');
	set V_MONEY0=REPLACE(V_MONEY0,'萬肆拾','萬零肆拾');
	set V_MONEY0=REPLACE(V_MONEY0,'萬伍拾','萬零伍拾');
	set V_MONEY0=REPLACE(V_MONEY0,'萬陸拾','萬零陸拾');
	set V_MONEY0=REPLACE(V_MONEY0,'萬柒拾','萬零柒拾');
	set V_MONEY0=REPLACE(V_MONEY0,'萬捌拾','萬零捌拾');
	set V_MONEY0=REPLACE(V_MONEY0,'萬玖拾','萬零玖拾');
	set V_MONEY0=REPLACE(V_MONEY0,'萬壹佰','萬零壹佰');
	set V_MONEY0=REPLACE(V_MONEY0,'萬貳佰','萬零貳佰');
	set V_MONEY0=REPLACE(V_MONEY0,'萬叄佰','萬零叄佰');
	set V_MONEY0=REPLACE(V_MONEY0,'萬肆佰','萬零肆佰');
	set V_MONEY0=REPLACE(V_MONEY0,'萬伍佰','萬零伍佰');
	set V_MONEY0=REPLACE(V_MONEY0,'萬陸佰','萬零陸佰');
	set V_MONEY0=REPLACE(V_MONEY0,'萬柒佰','萬零柒佰');
	set V_MONEY0=REPLACE(V_MONEY0,'萬捌佰','萬零捌佰');
	set V_MONEY0=REPLACE(V_MONEY0,'萬玖佰','萬零玖佰');
/* 判斷最後一個千和元之間間隔的位數 */
	if locate('元',V_MONEY0)-locate('仟',V_MONEY0)=2 then
		set V_MONEY0=REPLACE(V_MONEY0,'仟壹','仟零壹');
		set V_MONEY0=REPLACE(V_MONEY0,'仟貳','仟零貳');
		set V_MONEY0=REPLACE(V_MONEY0,'仟叄','仟零叄');
		set V_MONEY0=REPLACE(V_MONEY0,'仟肆','仟零肆');
		set V_MONEY0=REPLACE(V_MONEY0,'仟伍','仟零伍');
		set V_MONEY0=REPLACE(V_MONEY0,'仟陸','仟零陸');
		set V_MONEY0=REPLACE(V_MONEY0,'仟柒','仟零柒');
		set V_MONEY0=REPLACE(V_MONEY0,'仟捌','仟零捌');
		set V_MONEY0=REPLACE(V_MONEY0,'仟玖','仟零玖');
	end if;
	set V_MONEY0=REPLACE(V_MONEY0,'仟壹拾','仟零壹拾');
	set V_MONEY0=REPLACE(V_MONEY0,'仟貳拾','仟零貳拾');
	set V_MONEY0=REPLACE(V_MONEY0,'仟叄拾','仟零叄拾');
	set V_MONEY0=REPLACE(V_MONEY0,'仟肆拾','仟零肆拾');
	set V_MONEY0=REPLACE(V_MONEY0,'仟伍拾','仟零伍拾');
	set V_MONEY0=REPLACE(V_MONEY0,'仟陸拾','仟零陸拾');
	set V_MONEY0=REPLACE(V_MONEY0,'仟柒拾','仟零柒拾');
	set V_MONEY0=REPLACE(V_MONEY0,'仟捌拾','仟零捌拾');
	set V_MONEY0=REPLACE(V_MONEY0,'仟玖拾','仟零玖拾');
/* 判斷最後一個佰和元之間間隔的位數 */
	if locate('元',V_MONEY0)-locate('佰',V_MONEY0)=2 then
		set V_MONEY0=REPLACE(V_MONEY0,'佰壹','佰零壹');
		set V_MONEY0=REPLACE(V_MONEY0,'佰貳','佰零貳');
		set V_MONEY0=REPLACE(V_MONEY0,'佰叄','佰零叄');
		set V_MONEY0=REPLACE(V_MONEY0,'佰肆','佰零肆');
		set V_MONEY0=REPLACE(V_MONEY0,'佰伍','佰零伍');
		set V_MONEY0=REPLACE(V_MONEY0,'佰陸','佰零陸');
		set V_MONEY0=REPLACE(V_MONEY0,'佰柒','佰零柒');
		set V_MONEY0=REPLACE(V_MONEY0,'佰捌','佰零捌');
		set V_MONEY0=REPLACE(V_MONEY0,'佰玖','佰零玖');
	end if;
	
	if SUBSTR(V_MONEY0,LENGTH(V_MONEY0)/2-1,1)='零' then
		set V_MONEY0=SUBSTR(V_MONEY0,1,LENGTH(V_MONEY0)/2-2);
	end if;
	if SUBSTR(V_MONEY0,LENGTH(V_MONEY0)/2-1,1)='零' then
		set V_MONEY0=SUBSTR(V_MONEY0,1,LENGTH(V_MONEY0)/2-2);
		set V_MONEY0=CONCAT(V_MONEY0,'整');
	end if;
/* 判斷有沒有零角,有就替換成零 */
	set V_MONEY0=REPLACE(V_MONEY0,'零角','零');
	if V_MONEY0='元整' then
		set V_MONEY0='零元';
	end if;
	return V_MONEY0;
END;

測試方法

SELECT to_china_num('2343121.12') AS mathTochar;

mysql轉大寫金額

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章