您的位置:首页 > 数据库

来谈谈SQL数据库中滥用临时表、排序的解决方案优化(举例:汉字转拼音函数)

2011-01-12 14:18 295 查看
游标、临时表、触发器、COLLATE等等...
无可厚非、这些都是好东西
我为什么今天要花时间来写这些东西呢?
是因为我发现慢慢的很多人用久了这些东西之后会形成一种习惯,不管解决什么问题动不动都会把它们搬出来
由此我看到了很多漂亮的代码在性能效率面前却显得不那么优秀

好了废话不多说开始进入正题吧
今天的案例

场景:

需要通过用户输入的姓名关键字来搜索用户。用户输入关键字'x'来搜索用户(数据来源于表[Name字段中]或内存[List<UserInfo>]中)

要求:
得到的结果排序应为:

x

xia

xiao

yx

即:

包含x字母的结果均应显示出来

首字母匹配的结果应该排在前面(如x开头)

在条件2相同的前提下更短的结果应排在前面(如x排在xia前面)

各位大侠能否给出一套c#与sql server(2008)的解决方案?

补充:

如果能一起解决中文问题最好,如搜索'x'

得到的结果排序应为:

x

xiani

夏荣

肖小笑

杨星

即将汉字的拼音首字母纳入在内,不知sqlserver是否支持这一特性的搜索?

感谢[学习的脚步]这位网友提出来的问题

其实要解决这个问题不难,无非就是汉字转拼音首字母

---------------------------------------------------------------------------------------------

先给出解决方案一

代码

create   function   [dbo].[fn_getpy5]
(@str   nvarchar(4000))
returns   nvarchar(4000)
as
begin
declare   @str_len   int,@result   nvarchar(4000) ,@crs nvarchar(1)
set @str_len=len(@str)
set @result= ' '
while   @str_len> 0
begin
set  @crs=substring(@str,@str_len,1)

select  @str_len=@str_len-1,@result=
case
when @crs>='帀' then 'Z'
when @crs>='丫' then 'Y'
when @crs>='夕' then 'X'
when @crs>='屲' then 'W'
when @crs>='他' then 'T'
when @crs>='仨' then 'S'
when @crs>='呥' then 'R'
when @crs>='七' then 'Q'
when @crs>='妑' then 'P'
when @crs>='噢' then 'O'
when @crs>='拏' then 'N'
when @crs>='嘸' then 'M'
when @crs>='垃' then 'L'
when @crs>='咔' then 'K'
when @crs>='丌' then 'J'
when @crs>='铪' then 'H'
when @crs>='旮' then 'G'
when @crs>='发' then 'F'
when @crs>='妸' then 'E'
when @crs>='咑' then 'D'
when @crs>='嚓' then 'C'
when @crs>='八' then 'B'
when @crs>='吖' then 'A'
else  @crs  end+@result
end
return(@result)
end


估计运算开销 0

实际执行:1万行数据调用此函数0~1秒

----------------------------------------------------------------------------------------------------------

好了,这些方案我都写完了、简单的总结一下

其实不管你写了多少年的SQL 有的时候不要养成一种先入为主、自作聪明的观念

一个优秀的解决方案也许只需最简单的代码就能达到理想的效果。

所以谨以此篇文章来希望让更多的人看到,其实我们生活当中经常所遇到的问题往往都是我们无限的把它复杂化,严重化了

退一步海阔天空、换个角度想想吧

----------------------------------------------------------------------------------------------------------

今天的文章就到这里,以实用为主 你学到了吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: