首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

按首字母查询中文有关问题

2012-01-03 
按首字母查询中文问题。如题,请高手指教:比如我现在有一个信息库,内存储用户名及一些其它住处。现在的需求是

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

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

现在的需求是,输入比如: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


SELECT @i=@i+1, @L=@L+1 END
RETURN @cHelpCode
END


create function f_ch2py(@chn nchar(1))
returns char(1)
as
begin
declare @n int
declare @c char(1)
set @n = 63

select @n = @n +1,
@c = case chn when @chn then char(@n) else @c end
from(
select top 27 * from (
select chn =
'吖 ' 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 --because have no 'i '
'丌 ' 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 --no 'u '
'屲 ' union all select --no 'v '
'屲 ' union all select
'夕 ' union all select
'丫 ' union all select
'帀 ' union all select @chn) as a
order by chn COLLATE Chinese_PRC_CI_AS
) as b
return(@c)
end



[解决办法]
数据库中用一列专门存储首字母缩写就省事了.
[解决办法]
有获取汉字拼音首字母的java函数和存储过程,考虑可移植性,建议选java 函数,你到网上搜一下,是别人写的
[解决办法]
最好象楼上朋友所说,在表中“姓名”后面加一个字段“缩写”。而不是在检索的时候临时去处理缩写问题。

若要简化程序设计,就直接让用户在录入的时候敲入缩写。这在以往几乎所有医疗软件中都是这么做的。对用户也不算特别麻烦。

如果不希望让用户自己敲,也可以用程序在添加之前先求得缩写。
具体的可以看我在这个帖里的回复 http://community.csdn.net/Expert/topic/5411/5411090.xml?temp=.5280878

热点排行