RT
如何将一个字符串中的所有的全角假名转换成半角假名。
例如:
输入:"1あア2"
变成:"1ぁア2"那位大侠,帮帮小弟。

解决方案 »

  1.   

    SELECT To_single_byte('1あア2') FROM dual; ---转成半角--SELECT To_muil_byte('881898?71') FROM dual-----转成全角--length(p1.accounts)!=lengthb(p1.accounts)----此条件是查出哪些记录里含有全角字符
      

  2.   

    ORACLE 全角数字转半角数字
    数据库表 test 字段 id  name age全角数字:123456半角数字:123456 length和lengthb的区别:length(123456)             6lengthb(123456)    12 to_single_byte函数用法:to_single_byte(123456)   123456 查找所有全角的数字:select age from test where lengthB(age) >6 替换全角的为半角的:update test  t1 set t1.age = (select to_single_byte(t2.age) from test  t2 where t1.id = t2.id) ok!!
      

  3.   

    1.ORACLE自带的函数可以转换标点符号;   
      2.fn_knachg函数为转换全半角函数   
              参数:pKna为要转换的字符串;   
                          pPara:1为半角   →   全角;   
                                        2为全角   →   半角。   
        
      string   findSQL   =   "";   
      string   query   =   "abc";   
      findSQL   =   "SELECT   count(*)   cout   from   test1   where   fn_knachg(TO_MULTI_BYTE(test),1)   like   '%'||fn_knachg(TO_MULTI_BYTE('"   +   query   +   "'),1)||'%'";   
        
      CREATE   OR   REPLACE   FUNCTION   fn_knachg(pKna   IN   VARCHAR2,   pPara   IN   VARCHAR2)   RETURN   VARCHAR2   IS   
      TYPE     t_Zen1   IS   varray(95)   of   VARCHAR2(2);       
      tZen1     t_Zen1   :=   t_Zen1('ア',   'イ',   'ウ',   'エ',   'オ',   'カ',   'キ',   'ク',   'ケ',   'コ',   'サ',   'シ',   'ス',   'セ',   'ソ',   
                        'タ',   'チ',   'ツ',   'テ',   'ト',   'ナ',   'ニ',   'ヌ',   'ネ',   'ノ',   'ハ',   'ヒ',   'フ',   'ヘ',   'ホ',   
                        'マ',   'ミ',   'ム',   'メ',   'モ',   'ヤ',   'ユ',   'ヨ',   'ラ',   'リ',   'ル',   'レ',   'ロ',   'ワ',   'ヲ',   
                        'ン',   'ァ',   'ィ',   'ゥ',   'ェ',   'ォ',   'ッ',   'ャ',   'ュ',   'ョ',   'ー',   '、',   '。',   '・',   '」',   
                        '「',   '゛',   ' ',   ',',   '<',   '.',   '>',   '/',   '?',   '_',   '}',   ']',   '*',   ':',   '+',   
                        ';',   '{',   '[',   ' ̄',   '@',   '|',   '¥',   '`',   '^',   '=',   '-',   ')',   '(',   '&',   '%',   
                        '$',   '#',   '”',   '!',   '’');   
      TYPE     t_Han1   IS   varray(95)   of   VARCHAR2(2);   
      tHan1     t_Han1   :=   t_Han1('ア',   'イ',   'ウ',   'エ',   'オ',   'カ',   'キ',   'ク',   'ケ',   'コ',   'サ',   'シ',   'ス',   'セ',   'ソ',   
                        'タ',   'チ',   'ツ',   'テ',   'ト',   'ナ',   'ニ',   'ヌ',   'ネ',   'ノ',   'ハ',   'ヒ',   'フ',   'ヘ',   'ホ',   
                        'マ',   'ミ',   'ム',   'メ',   'モ',   'ヤ',   'ユ',   'ヨ',   'ラ',   'リ',   'ル',   'レ',   'ロ',   'ワ',   'ヲ',   
                        'ン',   'ァ',   'ィ',   'ゥ',   'ェ',   'ォ',   'ッ',   'ャ',   'ュ',   'ョ',   'ー',   '、',   '。',   '・',   '」',   
                        '&#65378;',   '&#65438;',   '   ',   ',',   '<',   '.',   '>',   '/',   '?',   '_',   '}',   ']',   '*',   ':',   '+',   
                        ';',   '{',   '[',   '~',   '@',   '|',   '\',   '`',   '^',   '=',   '-',   ')',   '(',   '&',   '%',   
                        '$',   '#',   '"',   '!',   '''');   
          
      TYPE     t_Zen2   IS   varray(26)   of   VARCHAR2(2);       
      tZen2     t_Zen2   :=   t_Zen2('ガ',   'ギ',   'グ',   'ゲ',   'ゴ',   'ザ',   'ジ',   'ズ',   'ゼ',   'ゾ',   'ダ',   'ヂ',   'ヅ',   'デ',   'ド',   
                        'バ',   'ビ',   'ブ',   'ベ',   'ボ',   'パ',   'ピ',   'プ',   'ペ',   'ポ',   'ヴ');   
      TYPE     t_Han2   IS   varray(26)   of   VARCHAR2(4);   
      tHan2     t_Han2   :=   t_Han2('&#65398;&#65438;',   '&#65399;&#65438;',   '&#65400;&#65438;',   '&#65401;&#65438;',   '&#65402;&#65438;',   '&#65403;&#65438;',   '&#65404;&#65438;',   '&#65405;&#65438;',   '&#65406;&#65438;',   '&#65407;&#65438;',   '&#65408;&#65438;',   '&#65409;&#65438;',   '&#65410;&#65438;',   '&#65411;&#65438;',   '&#65412;&#65438;',   
                        '&#65418;&#65438;',   '&#65419;&#65438;',   '&#65420;&#65438;',   '&#65421;&#65438;',   '&#65422;&#65438;',   '&#65418;&#65439;',   '&#65419;&#65439;',   '&#65420;&#65439;',   '&#65421;&#65439;',   '&#65422;&#65439;',   '&#65395;&#65438;');   
          
      TYPE     t_Zen3   IS   varray(5)   of   VARCHAR2(2);         
      tZen3     t_Zen3   :=   t_Zen3('ヮ',   'ヰ',   'ヱ',   'ヵ',   'ヶ');   
      TYPE     t_Han3   IS   varray(5)   of   VARCHAR2(2);   
      tHan3     t_Han3   :=   t_Han3('&#65436;',   '&#65394;',   '&#65396;',   '&#65398;',   '&#65401;');   
          
      sKna     varchar2(4000);   
      i       int;   
      BEGIN   
          
      sKna   :=   pKna;   
      if   pPara   =   '1'   then     --   半角   →   全角   
          for   i   in   1..26   loop   
            sKna   :=   replace(sKna,   tHan2(i),   tZen2(i));   
          end   loop;   
          
          for   i   in   1..95   loop   
            sKna   :=   replace(sKna,   tHan1(i),   tZen1(i));   
          end   loop;   
          sKna   :=   to_multi_byte(sKna);   
      elsif   pPara   =   '2'   then   --   全角   →   半角   
          for   i   in   1..26   loop   
            sKna   :=   replace(sKna,   tZen2(i),   tHan2(i));   
          end   loop;   
          
          for   i   in   1..95   loop   
            sKna   :=   replace(sKna,   tZen1(i),   tHan1(i));   
          end   loop;   
          
          for   i   in   1..5   loop   
            sKna   :=   replace(sKna,   tZen3(i),   tHan3(i));   
          end   loop;   
          sKna   :=   to_single_byte(sKna);   
      end   if;   
      return   sKna;   
          
      END;   
      

  4.   

    lv_moji := Translate(lv_moji,'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ','アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ');
    lv_moji := Translate(lv_moji,'ぁぃぅぇぉゃゅょっゎ','ァィゥェォャュョッヮ');
      

  5.   

    lv_moji := Translate(lv_moji,'あいうえおかきくけこさしすせそたちつてとなにぬねの','アイウエオカキクケコサシスセソタチツテトナニヌネノ');
      

  6.   

    declare
    v_zenkaku constant varchar2(4000) := 'アイウエオカキクケコサシスセソタチツテ
    トナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲゴザジズゼゾダ
    ヂヅデドバビブベボパピプペポァィゥェォュョ';
    v_kankaku constant varchar2(4000) := 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨ
    ラリルレロワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポァィゥェォ';
    v_test_str varchar2(4000) := '123エ33*@(オsklス';
    begin
    v_test_str := TRANSLATE(v_test_str,v_zenkaku,v_kankaku);
    v_test_str := TO_SINGLE_BYTE(v_test_str); dbms_output.put_line(v_test_str); end;