汉字转拼音码的函数

们在界面设计的时候,不管是Web的还是Winform的程序,为了方便用户对各种数据进行操作,提高用户的操作体验,都是一个永恒不变的话题,需要尽可能地提高。本文抛砖引玉,介绍本人在Web和Winform中使用拼音简码以及智能提示的具体例子,对这个话题进行探讨。

在下面的Web界面中,我们可以通过拼音首字母或者部分中文内容,来模糊搜索(类似Google搜索的智能提示),一个方便用户搜索,第二个有效利用Ajax技术来提高用户的体验。


用户可以输入中文,一样有智能提示。



在Winform界面中,同样也可以做到智能提示,由于Winform中的响应速度比较快,我们可以根据输入的首字母或者部分中文快速更新列表内容即可,如下图所示。


其实以上两个,都是需要一个Sql函数,就是把中文转换为首字母的函数,以便能够快速搜索内容,下面我列出SqlServer和Oracle的转换首字母的函数。以飨读者。

 

SqlServer的汉字转拼音码的函数:

代码
--
--
 Definition for user-defined function f_GetPy : 
--
GO
create   function   [dbo].f_GetPy(@str   nvarchar(4000)) 
returns   nvarchar(4000
as 
begin 
declare   @strlen   int,@re   nvarchar(4000
declare   @t   table(chr   nchar(1)   collate   Chinese_PRC_CI_AS,letter   nchar(1)) 
insert   into   @t(chr,letter) 
    
select   '吖 '''   union   all   select   '八 '''   union   all 
    
select   '嚓 '''   union   all   select   '咑 '''   union   all 
    
select   '妸 '''   union   all   select   '发 '''   union   all 
    
select   '旮 '''   union   all   select   '铪 '''   union   all 
    
select   '丌 '''   union   all   select   '咔 '''   union   all 
    
select   '垃 '''   union   all   select   '嘸 '''   union   all 
    
select   '拏 '''   union   all   select   '噢 '''   union   all 
    
select   '妑 '''   union   all   select   '七 '''   union   all 
    
select   '呥 '''   union   all   select   '仨 '''   union   all 
    
select   '他 '''   union   all   select   '屲 '''   union   all 
    
select   '夕 '''   union   all   select   '丫 '''   union   all 
    
select   '帀 ''' 
    
select   @strlen=len(@str),@re= ' ' 
    
while   @strlen> 0 
    
begin 
        
select   top   1   @re=letter+@re,@strlen=@strlen-1 
            
from   @t   a   where   chr <=substring(@str,@strlen,1
            
order   by   chr   desc 
        
if   @@rowcount=0 
            
select   @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1 
    
end 
    
return(@re
end

 

 

Oracle的汉字转拼音首字母的函数:

代码
CREATE OR REPLACE FUNCTION F_PINYIN(P_NAME IN VARCHAR2RETURN VARCHAR2 AS
     V_COMPARE 
VARCHAR2(100);
     V_RETURN 
VARCHAR2(4000);

     
FUNCTION F_NLSSORT(P_WORD IN VARCHAR2RETURN VARCHAR2 AS
     
BEGIN
      
RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
     
END;
    
BEGIN

    
FOR I IN 1..NVL(LENGTH(P_NAME), 0) LOOP
     V_COMPARE :
= F_NLSSORT(SUBSTR(P_NAME, I, 1));
     
IF V_COMPARE >= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'A';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT('簿'THEN
      V_RETURN :
= V_RETURN || 'B';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'C';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'D';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'E';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'F';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'G';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'H';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'J';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'K';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'L';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'M';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'N';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'O';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'P';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'Q';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'R';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'S';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'T';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'W';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'X';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'Y';
     ELSIF V_COMPARE 
>= F_NLSSORT(''AND V_COMPARE <= F_NLSSORT(''THEN
      V_RETURN :
= V_RETURN || 'Z';
     
END IF;
    
END LOOP;
    
RETURN V_RETURN;
   
END;
posted @ 2010-01-28 16:02  XGU_Winner  阅读(1543)  评论(0编辑  收藏  举报