Oracle中SQL查询语句日文不区分全角/半角

dfd

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('ア',   'イ',   'ウ',   'エ',   'オ',   'カ',   'キ',   'ク',   'ケ',   'コ',   'サ',   'シ',   'ス',   'セ',   'ソ',   
                    'タ',   'チ',   'ツ',   'テ',   'ト',   'ナ',   'ニ',   'ヌ',   'ネ',   'ノ',   'ハ',   'ヒ',   'フ',   'ヘ',   'ホ',   
                    'マ',   'ミ',   'ム',   'メ',   'モ',   'ヤ',   'ユ',   'ヨ',   'ラ',   'リ',   'ル',   'レ',   'ロ',   'ワ',   'ヲ',   
                    'ン',   'ァ',   'ィ',   'ゥ',   'ェ',   'ォ',   'ッ',   'ャ',   'ュ',   'ョ',   'ー',   '、',   '。',   '・',   '」',   
                    '「',   '゙',   '   ',   ',',   '<',   '.',   '>',   '/',   '?',   '_',   '}',   ']',   '*',   ':',   '+',   
                    ';',   '{',   '[',   '~',   '@',   '|',   '\',   '`',   '^',   '=',   '-',   ')',   '(',   '&',   '%',   
                    '$',   '#',   '"',   '!',   '''');   
      
  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('ガ',   'ギ',   'グ',   'ゲ',   'ゴ',   'ザ',   'ジ',   'ズ',   'ゼ',   'ゾ',   'ダ',   'ヂ',   'ヅ',   'デ',   'ド',   
                    'バ',   'ビ',   'ブ',   'ベ',   'ボ',   'パ',   'ピ',   'プ',   'ペ',   'ポ',   'ヴ');   
      
  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('ワ',   'イ',   'エ',   'カ',   'ケ');   
      
  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;   

 

 

你可能感兴趣的:(oracle,sql,tomcat,jdbc,Gmail)