C#、Oracle、Sql server中拼音查询的函数

C# sqlserver oracle 的都有 不过发现那个 C# 的好像"楠"字查的时候会有问题。。。不知道为啥。。

C#

  1 /// <summary>
  2    /// 生成拼音简码
  3    /// </summary>
  4    /// <param name="unicodeString">Unicode编码字符串</param>
  5    /// <returns>拼音简码:string</returns>

  6      public  static  string GetPinyinCode( string unicodeString)
  7      {
  8        int i = 0;
  9        ushort key = 0;
 10        string strResult = string.Empty;
 11        //创建两个不同的encoding对象
 12        Encoding unicode = Encoding.Unicode;
 13        //创建GBK码对象
 14        Encoding gbk = Encoding.GetEncoding(936);
 15        //将unicode字符串转换为字节
 16        byte[] unicodeBytes = unicode.GetBytes(unicodeString);
 17        //再转化为GBK码
 18        byte[] gbkBytes = Encoding.Convert(unicode, gbk, unicodeBytes);
 19        while (i < gbkBytes.Length)
 20        {
 21            //如果为数字\字母\其他ASCII符号
 22            if (gbkBytes[i] <= 127)
 23            {
 24                strResult = strResult + (char)gbkBytes[i];
 25                i++;
 26            }

 27            #region 否则生成汉字拼音简码,取拼音首字母
 28            else
 29            {
 30
 31                key = (ushort)(gbkBytes[i] * 256 + gbkBytes[i + 1]);
 32                if (key >= '\uB0A1' && key <= '\uB0C4')
 33                {
 34                    strResult = strResult + "A";
 35                }

 36                else if (key >= '\uB0C5' && key <= '\uB2C0')
 37                {
 38                    strResult = strResult + "B";
 39                }

 40                else if (key >= '\uB2C1' && key <= '\uB4ED')
 41                {
 42                    strResult = strResult + "C";
 43                }

 44                else if (key >= '\uB4EE' && key <= '\uB6E9')
 45                {
 46                    strResult = strResult + "D";
 47                }

 48                else if (key >= '\uB6EA' && key <= '\uB7A1')
 49                {
 50                    strResult = strResult + "E";
 51                }

 52                else if (key >= '\uB7A2' && key <= '\uB8C0')
 53                {
 54                    strResult = strResult + "F";
 55                }

 56                else if (key >= '\uB8C1' && key <= '\uB9FD')
 57                {
 58                    strResult = strResult + "G";
 59                }

 60                else if (key >= '\uB9FE' && key <= '\uBBF6')
 61                {
 62                    strResult = strResult + "H";
 63                }

 64                else if (key >= '\uBBF7' && key <= '\uBFA5')
 65                {
 66                    strResult = strResult + "J";
 67                }

 68                else if (key >= '\uBFA6' && key <= '\uC0AB')
 69                {
 70                    strResult = strResult + "K";
 71                }

 72                else if (key >= '\uC0AC' && key <= '\uC2E7')
 73                {
 74                    strResult = strResult + "L";
 75                }

 76                else if (key >= '\uC2E8' && key <= '\uC4C2')
 77                {
 78                    strResult = strResult + "M";
 79                }

 80                else if (key >= '\uC4C3' && key <= '\uC5B5')
 81                {
 82                    strResult = strResult + "N";
 83                }

 84                else if (key >= '\uC5B6' && key <= '\uC5BD')
 85                {
 86                    strResult = strResult + "O";
 87                }

 88                else if (key >= '\uC5BE' && key <= '\uC6D9')
 89                {
 90                    strResult = strResult + "P";
 91                }

 92                else if (key >= '\uC6DA' && key <= '\uC8BA')
 93                {
 94                    strResult = strResult + "Q";
 95                }

 96                else if (key >= '\uC8BB' && key <= '\uC8F5')
 97                {
 98                    strResult = strResult + "R";
 99                }

100                else if (key >= '\uC8F6' && key <= '\uCBF9')
101                {
102                    strResult = strResult + "S";
103                }

104                else if (key >= '\uCBFA' && key <= '\uCDD9')
105                {
106                    strResult = strResult + "T";
107                }

108                else if (key >= '\uCDDA' && key <= '\uCEF3')
109                {
110                    strResult = strResult + "W";
111                }

112                else if (key >= '\uCEF4' && key <= '\uD188')
113                {
114                    strResult = strResult + "X";
115                }

116                else if (key >= '\uD1B9' && key <= '\uD4D0')
117                {
118                    strResult = strResult + "Y";
119                }

120                else if (key >= '\uD4D1' && key <= '\uD7F9')
121                {
122                    strResult = strResult + "Z";
123                }

124                else
125                {
126                    strResult = strResult + "?";
127                }

128                i = i + 2;
129            }

130            #endregion

131        }
//end while 
132
133        return strResult;
134    }
 

Oracle

 1 create  or  replace  function fGetPy
 2 (V_Str  varchar2)
 3 return  varchar2 
 4 as        
 5   v_strlen  int;
 6   v_return  varchar2( 500);
 7   v_ii  int    ;
 8   v_n  int;
 9   v_c  char( 1);
10   v_chn  varchar2( 2);
11   V_RC  varchar2( 500);
12 begin
13  V_RC: =V_Str;
14
15  v_strlen : = len(V_RC);
16  v_return : =  '';
17  v_ii: = 0
18   while v_ii <v_strlen loop    
19   v_ii: =v_ii + 1;
20   v_n: = 63;
21    SELECT  substring(V_RC,v_ii, 1INTO v_chn  FROM DUAL;
22
23
24    select v_n + max(rowsf)  into v_n
25     from
26     select chn,ROWNUM rowsf  from(   
27      select chn  from (    
28       select  ' '  chn   from dual
29       union   select  ' '    from dual 
30       union  all   select  ' '   from dual  
31       union  all   select  ' '    from dual 
32       union  all   select  ' '     from dual
33       union  all  select  ' '     from dual
34       union  all  select  ' '    from dual 
35       union  all  select  ' '    from dual 
36       union  all  select  ' '   from dual -- because have no 'i'    
37       union  all  select  ' '    from dual 
38       union  all  select  ' '     from dual
39       union  all  select  ' '    from dual 
40       union  all  select  ' '    from dual 
41       union  all  select  ' '     from dual
42       union  all  select  ' '    from dual 
43       union  all  select  ' '    from dual 
44       union  all  select  ' '    from dual 
45       union  all  select  ' '     from dual
46       union  all  select  ' '     from dual
47       union  all  select  ' '     from dual
48       union  all  select  ' '   from dual   
49       union  all  select  ' '   from dual    
50       union  all  select  ' '  from dual   
51       union  all  select  ' '   from dual  
52       union  all  select  ' '   from dual  
53       union  all  select  ' '     from dual
54       union  all  select v_chn  from dual
55      )  a    
56     order  by nlssort(chn, ' NLS_SORT=SCHINESE_PINYIN_M '
57    ) c
58     )  b  WHERE chn =v_chn ;
59
60    
61   v_c: =chr(v_n);
62    if chr(v_n)  = ' @ '  then -- 英文直接返回    
63    v_c: =v_chn    ;
64     end  if;
65    
66  
67   v_return: =v_return ||v_c;
68   end loop; 
69  
70   return v_return;    
71 end;

sql server

 1 create    function   fGetPy( @Str    varchar( 500) = '')   
 2    returns    varchar( 500)   
 3    as   
 4    begin   
 5    declare    @strlen    int, @return    varchar( 500), @ii    int   
 6    declare    @n    int, @c    char( 1), @chn    nchar( 1)   
 7     
 8    select    @strlen = len( @str), @return = '', @ii = 0   
 9    set    @ii = 0   
10    while    @ii < @strlen   
11    begin   
12    select    @ii = @ii + 1, @n = 63, @chn = substring( @str, @ii, 1)   
13    select    @n    =    @n    + 1   
14   , @c    =    case   chn    when    @chn    then    char( @n)    else    @c    end   
15    from(   
16    select    top    27    *    from   (   
17    select   chn    =    ' '   
18    union    all    select    ' '   
19    union    all    select    ' '   
20    union    all    select    ' '   
21    union    all    select    ' '   
22    union    all    select    ' '   
23    union    all    select    ' '   
24    union    all    select    ' '   
25    union    all    select    ' '  -- because   have   no   'i'   
26    union    all    select    ' '   
27    union    all    select    ' '   
28    union    all    select    ' '   
29    union    all    select    ' '   
30    union    all    select    ' '   
31    union    all    select    ' '   
32    union    all    select    ' '   
33    union    all    select    ' '   
34    union    all    select    ' '   
35    union    all    select    ' '   
36    union    all    select    ' '   
37    union    all    select    ' '  -- no   'u'   
38    union    all    select    ' '  -- no   'v'   
39    union    all    select    ' '   
40    union    all    select    ' '   
41    union    all    select    ' '   
42    union    all    select    ' '   
43    union    all    select    @chn)    as   a   
44    order    by   chn   COLLATE   Chinese_PRC_CI_AS     
45   )    as   b   
46    set    @return = @return + @c   
47    end   
48    return( @return)   
49    end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值