加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

winform用户输入查询与拼音首字母的结合,提高用户的操作体验

发布时间:2020-12-12 14:47:24 所属栏目:MsSql教程 来源:网络整理
导读:在Winform界面中,同样也可以做到智能提示,由于Winform中的响应速度比较快,我们可以根据输入的首字母或者部分中文快速更新列表内容即可,如下图所示。 其实以上两个,都是需要一个Sql函数,就是把中文转换为首字母的函数,以便能够快速搜索内容,下面我列

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


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

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

代码 <!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> --
--
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 ?? ' ' , ' A ' ?? union ?? all ?? select ?? ' ' , ' B ' ?? union ?? all
???
select ?? ' ' , ' C ' ?? union ?? all ?? select ?? ' ' , ' D ' ?? union ?? all
???
select ?? ' ' , ' E ' ?? union ?? all ?? select ?? ' ' , ' F ' ?? union ?? all
???
select ?? ' ' , ' G ' ?? union ?? all ?? select ?? ' ' , ' H ' ?? union ?? all
???
select ?? ' ' , ' J ' ?? union ?? all ?? select ?? ' ' , ' K ' ?? union ?? all
???
select ?? ' ' , ' L ' ?? union ?? all ?? select ?? ' ' , ' M ' ?? union ?? all
???
select ?? ' ' , ' N ' ?? union ?? all ?? select ?? ' ' , ' O ' ?? union ?? all
???
select ?? ' ' , ' P ' ?? union ?? all ?? select ?? ' ' , ' Q ' ?? union ?? all
???
select ?? ' ' , ' R ' ?? union ?? all ?? select ?? ' ' , ' S ' ?? union ?? all
???
select ?? ' ' , ' T ' ?? union ?? all ?? select ?? ' ' , ' W ' ?? union ?? all
???
select ?? ' ' , ' X ' ?? union ?? all ?? select ?? ' ' , ' Y ' ?? union ?? all
???
select ?? ' ' , ' Z '
???
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 , 1 ) + @re , @strlen = @strlen - 1
???
end
???
return ( @re )
end
复制代码

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

代码 <!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> CREATE OR REPLACE FUNCTION F_PINYIN(P_NAME IN VARCHAR2 ) RETURN VARCHAR2 AS
???? V_COMPARE
VARCHAR2 ( 100 );
???? V_RETURN
VARCHAR2 ( 4000 );

????
FUNCTION F_NLSSORT(P_WORD IN VARCHAR2 ) RETURN 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 ;
复制代码

使用代码大概如下所示:

使用例子1:

代码 <!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> ??????? /// <summary>
???????
/// 根据商品名称获取商品列表
???????
/// </summary>
???????
/// <param name="goodsType"> 商品类型 </param>
???????
/// <returns></returns>
??????? public List < GoodsInfo > FindByName( string goodsName)
??????? {
???????????
string sql = string .Format( " Name like '%{0}%' or dbo.f_GetPy(Name) like '{0}%' " ,goodsName);
???????????
return this .Find(sql);
??????? }
复制代码 ? 转载:http://www.cnblogs.com/wuhuacong/archive/2010/01/25/1655916.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读