日期:2014-05-18  浏览次数:20708 次

按首字母查询中文问题。
如题,请高手指教:

比如我现在有一个信息库,内存储用户名及一些其它住处。

现在的需求是,输入比如:ZS进行模糊查询,查询过程中可以查询到,张山,张三,张栅,张珊,张三风,张山枫等。

大家有何好办法吗?

------解决方案--------------------
没有人帮忙啊。自己顶起。。大家帮忙啊。。。
------解决方案--------------------
那输入zhsh呢?
是张(zhang)使(shi)
还是张(zhang)思(si)和(he)
还是藏(zang)和(he)使(shi)
还是藏(zang)和(he)思(si)和(he)

呵呵
------解决方案--------------------
把每个字的首字母跟汉字做成hash表
首字母1----汉字1
首字母1----汉字2
首字母1----汉字2
首字母1----汉字2
首字母1----汉字2
或者做成表就行,两个表,一个是首字母,一个是汉字的编码。反正是1:n的关系
------解决方案--------------------
同意這樣的做法,配合ajax自動完成功能
------解决方案--------------------
--SQL Server 2000数据库的解决方案:
create function 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,@strlen,1)+@re,@strlen=@strlen-1
end
return(@re)
end
go
--调用
select * from a where dbo.f_GetPy(Name) like 'ZS% '
------解决方案--------------------
顶一下。
------解决方案--------------------
CREATE TRIGGER aa ON dbo.ccccc
FOR INSERT, UPDATE, DELETE
AS
update ccc set pinyin=dbo.F_GetHelpCode(b.name)
from ccc a,inserted b
where a.code=b.code


CREATE FUNCTION F_GetHelpCode (
@cName VARCHAR(50) )
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @i SMALLINT, @L SMALLINT , @cHelpCode VARCHAR(20), @e VARCHAR(20), @iAscii SMALLINT
SELECT @i=1, @L=0 , @cHelpCode= ' '
while @L <=20 AND @i <=LEN(@cName) BEGIN
SELECT @e=LOWER(SUBSTRING(@cname,@i,1))
SELECT @iAscii=ASCII(@e)
IF @iAscii> =48 AND @iAscii <=57 OR @iAscii> =97 AND @iAscii <=122 or @iAscii=95
SELECT @cHelpCode=@cHelpCode +@e
ELSE
IF @iAscii> =176 AND @iAscii <=247
SELECT @cHelpCode=@cHelpCode + dbo.f_ch2py(@e)
ELSE SELECT @L=@L-1