如何根据26个英文字母来检索汉字首字母

icod 2010-02-06 07:50:45
我有一个用户表,UserName存放姓名(汉字)
我想在一个页面里,根据根据26个英文字母来检索汉字首字母,从而得到相应的用户名称
如何实现?


例如 我选 Z , 应该索引到张三,章民

...全文
1958 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
kk_luan 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lzsh0622 的回复:]
我写的是通用的,楼主根据需要 在14楼 GetCN()的返回语句行

return AscToCN(ascFrom) + " - " + AscToCN(ascTo);

改成你需要的 SQL语的查询WHERE条件就行了。
[/Quote]


怎么改呢, 还不不太明白?
段传涛 2010-02-07
  • 打赏
  • 举报
回复
pack away this article
liuhongdeyy 2010-02-07
  • 打赏
  • 举报
回复
对于“重”字这种谐音的不好判断了

重庆、重要一个是'c',一个是'z'

lzsh0622 2010-02-06
  • 打赏
  • 举报
回复
我写的是通用的,楼主根据需要 在14楼 GetCN()的返回语句行

return AscToCN(ascFrom) + " - " + AscToCN(ascTo);

改成你需要的 SQL语的查询WHERE条件就行了。
lzsh0622 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 icod 的回复:]
我想 根据Z , 索引到张三,章民
    根据A , 索引到鞍山,安静  等
[/Quote]

返方向的:[A-Z] --> 查汉字范围


// 根据[A-Z][a-z]取得汉字范围
private static string GetCN(string AZChar)
{
string ascFrom = "", ascTo = "";
switch (AZChar.ToUpper())
{
case "A": ascFrom = "45217"; ascTo = "45252"; break;
case "B": ascFrom = "45253"; ascTo = "45760"; break;
case "C": ascFrom = "45761"; ascTo = "46317"; break;
case "D": ascFrom = "46318"; ascTo = "46825"; break;
case "E": ascFrom = "46826"; ascTo = "47009"; break;
case "F": ascFrom = "47010"; ascTo = "47296"; break;
case "G": ascFrom = "47297"; ascTo = "47613"; break;
case "H": ascFrom = "47614"; ascTo = "48118"; break;
case "J": ascFrom = "48119"; ascTo = "49061"; break;
case "K": ascFrom = "49062"; ascTo = "49323"; break;
case "L": ascFrom = "49324"; ascTo = "49895"; break;
case "M": ascFrom = "49896"; ascTo = "50370"; break;
case "N": ascFrom = "50371"; ascTo = "50613"; break;
case "O": ascFrom = "50614"; ascTo = "50621"; break;
case "P": ascFrom = "50622"; ascTo = "50905"; break;
case "Q": ascFrom = "50906"; ascTo = "51386"; break;
case "R": ascFrom = "51387"; ascTo = "51445"; break;
case "S": ascFrom = "51446"; ascTo = "52217"; break;
case "T": ascFrom = "52218"; ascTo = "52697"; break;
case "W": ascFrom = "52698"; ascTo = "52979"; break;
case "X": ascFrom = "52980"; ascTo = "53640"; break;
case "Y": ascFrom = "53689"; ascTo = "54480"; break;
case "Z": ascFrom = "54481"; ascTo = "55289"; break;
default: break;
}
return AscToCN(ascFrom) + " - " + AscToCN(ascTo);
}

public static string AscToCN(string asc)
{
int i = Convert.ToInt32(asc);
byte[] array = new byte[2];
array[0] = (byte)((int)(i / 256));
array[1] = (byte)((int)(i % 256));
return System.Text.Encoding.Default.GetString(array);
}

// 测试用例
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(GetCN("Z"));
}

chen_ya_ping 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 icod 的回复:]
我有一个用户表,UserName存放姓名(汉字)
我想在一个页面里,根据根据26个英文字母来检索汉字首字母,从而得到相应的用户名称
如何实现?


例如 我选 Z , 应该索引到张三,章民


[/Quote]
楼主你可以去网上找找如何得到一个汉字的首字母的程序,这个网上是有的,得到了首字母,你就可以进行操作了。
itliyi 2010-02-06
  • 打赏
  • 举报
回复
ls的强悍 学习
qqzeng-ip 2010-02-06
  • 打赏
  • 举报
回复
--创建取拼音函数
create function fGetPy(@Str varchar(500)='')
returns varchar(500)
as
begin
declare @strlen int,@return varchar(500),@ii int
declare @n int,@c char(1),@chn nchar(1)

select @strlen=len(@str),@return='',@ii=0
set @ii=0
while @ii<@strlen
begin
select @ii=@ii+1,@n=63,@chn=substring(@str,@ii,1)
if @chn>'z'
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 '丌' --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 '帀'
union all select @chn) as a
order by chn COLLATE Chinese_PRC_CI_AS
) as b
else set @c='a'
set @return=@return+@c
end
return(@return)
end

go



--创建汉字拼音库
create table YingShe(CHR char(2),PY varchar(10))
insert YingShe
select '长','chang'
union all select '长','zhang'
union all select '城','cheng'
union all select '科','kel'
union all select '技','ji'
union all select '金','jin'
union all select '立','li'
union all select '章','zhang'
union all select '公','gong'
union all select '司','si'

/*--下面是两个函数,一个以表的形式返回某个字符串的全部拼音,一个返回某某个字符串的其中一个拼音
--*/

--获取汉字拼音的函数--返回所有的拼音
create function f_getpy_tb(@str varchar(100))
returns @tb table(re varchar(8000))
as
begin
declare @re table(id int,re varchar(8000)) --数据处理中间表

declare @i int,@ilen int,@splitchr varchar(1)
select @splitchr=' ' --两个拼音之间的分隔符(目的是为了通用性考虑)
,@i=1,@ilen=len(@str)

insert into @re select @i,py from YingShe where chr=substring(@str,@i,1)
while @i<@ilen
begin
set @i=@i+1
insert into @re select @i,re+@splitchr+py from @re a,YingShe b
where a.id=@i-1 and b.chr=substring(@str,@i,1)
end

insert into @tb select re from @re where id=@i
return
end
go

--获取汉字拼音的函数--返回汉字的某一个拼音
create function f_getpy(@str varchar(100))
returns varchar(8000)
as
begin
declare @re varchar(8000)

declare @i int,@ilen int,@splitchr varchar(1)
select @splitchr=' ' --两个拼音之间的分隔符(目的是为了通用性考虑)
,@i=1,@ilen=len(@str)

select @re=py from YingShe where chr=substring(@str,@i,1)
while @i<@ilen
begin
set @i=@i+1
select top 1 @re=@re+@splitchr+py
from YingShe where chr=substring(@str,@i,1)
end

return(@re)
end
go

--测试
--返回'长城'的所有可能拼音
select * from dbo.f_getpy_tb('长城')

--返回'长城'的拼音
select dbo.f_getpy('长城')

--删除拼音函数
drop function f_getpy,f_getpy_tb
kele1006 2010-02-06
  • 打赏
  • 举报
回复
对于汉字转拼音这种,目前网上流传的方法蛮多的,JS,数据库,方法转换等等,感觉蛮多字库转换还是比较有问题的。
推荐下微软官方的CHSPinYinConv.msi
ybblack001 2010-02-06
  • 打赏
  • 举报
回复
一个名称字段 一个拼音字段。其中拼音在insert的时候自动填入数据库。
查询时查询拼音显示名称即可
itliyi 2010-02-06
  • 打赏
  • 举报
回复
lz可以这样 注册时候输入真实姓名,根据真实姓名用3L的算法得到简拼,然后插入数据表 zs --张三
搜索时候z
select name from UserName where jp like 'z%'
itliyi 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 icod 的回复:]
我想 根据Z , 索引到张三,章民
    根据A , 索引到鞍山,安静  等


[/Quote]lz意思是注册用户时候输入真实姓名,根据真实姓名用3l的算法得到简拼,然后插入数据表 zs --张三
搜索时候z 自动匹配张三 ???
itliyi 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lzsh0622 的回复:]
试试:
C# code// 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母privatestaticstring GetCharSpellCode(string CnChar)
{long iCnChar;byte[] ZW= System.Text.Encoding.Default.GetBytes(CnChar);// (1) 如果是字母,则直接返回if (ZW.Length==1)return CnChar.ToUpper();else
{int i1= (short)(ZW[0]);int i2= (short)(ZW[1]);
iCnChar= i1*256+ i2;
}// (2) 汉字处理if ((iCnChar>=45217)&& (iCnChar<=45252))return"A";elseif ((iCnChar>=45253)&& (iCnChar<=45760))return"B";elseif ((iCnChar>=45761)&& (iCnChar<=46317))return"C";elseif ((iCnChar>=46318)&& (iCnChar<=46825))return"D";elseif ((iCnChar>=46826)&& (iCnChar<=47009))return"E";elseif ((iCnChar>=47010)&& (iCnChar<=47296))return"F";elseif ((iCnChar>=47297)&& (iCnChar<=47613))return"G";elseif ((iCnChar>=47614)&& (iCnChar<=48118))return"H";elseif ((iCnChar>=48119)&& (iCnChar<=49061))return"J";elseif ((iCnChar>=49062)&& (iCnChar<=49323))return"K";elseif ((iCnChar>=49324)&& (iCnChar<=49895))return"L";elseif ((iCnChar>=49896)&& (iCnChar<=50370))return"M";elseif ((iCnChar>=50371)&& (iCnChar<=50613))return"N";elseif ((iCnChar>=50614)&& (iCnChar<=50621))return"O";elseif ((iCnChar>=50622)&& (iCnChar<=50905))return"P";elseif ((iCnChar>=50906)&& (iCnChar<=51386))return"Q";elseif ((iCnChar>=51387)&& (iCnChar<=51445))return"R";elseif ((iCnChar>=51446)&& (iCnChar<=52217))return"S";elseif ((iCnChar>=52218)&& (iCnChar<=52697))return"T";elseif ((iCnChar>=52698)&& (iCnChar<=52979))return"W";elseif ((iCnChar>=52980)&& (iCnChar<=53640))return"X";elseif ((iCnChar>=53689)&& (iCnChar<=54480))return"Y";elseif ((iCnChar>=54481)&& (iCnChar<=55289))return"Z";elsereturn ("?");
}// 测试用例privatevoid button1_Click(object sender, EventArgs e)
{
MessageBox.Show(GetCharSpellCode("张"));
}
[/Quote]正解 貌似有少数汉字没有对应匹配码?
wuyq11 2010-02-06
  • 打赏
  • 举报
回复
按照中文分词,实现一个词语拼音的对照库。一个词语一个拼音,把分词后的词语和对照表对应,得到汉语的带音调的拼音或查询单词的拼音,显示所有拼音
http://topic.csdn.net/u/20091203/08/e7493cd9-7fad-422d-a315-60af6edd5f24.html
wosliuxiang 2010-02-06
  • 打赏
  • 举报
回复
收藏
zt_90520 2010-02-06
  • 打赏
  • 举报
回复
···学习··· -O-
icod 2010-02-06
  • 打赏
  • 举报
回复
我想 根据Z , 索引到张三,章民
根据A , 索引到鞍山,安静 等

jenny0810 2010-02-06
  • 打赏
  • 举报
回复
学习
lzsh0622 2010-02-06
  • 打赏
  • 举报
回复
试试:
// 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母 
private static string GetCharSpellCode(string CnChar)
{
long iCnChar;
byte[] ZW = System.Text.Encoding.Default.GetBytes(CnChar);

// (1) 如果是字母,则直接返回
if (ZW.Length == 1) return CnChar.ToUpper();
else
{
int i1 = (short)(ZW[0]);
int i2 = (short)(ZW[1]);
iCnChar = i1 * 256 + i2;
}

// (2) 汉字处理
if ((iCnChar >= 45217) && (iCnChar <= 45252)) return "A";
else if ((iCnChar >= 45253) && (iCnChar <= 45760)) return "B";
else if ((iCnChar >= 45761) && (iCnChar <= 46317)) return "C";
else if ((iCnChar >= 46318) && (iCnChar <= 46825)) return "D";
else if ((iCnChar >= 46826) && (iCnChar <= 47009)) return "E";
else if ((iCnChar >= 47010) && (iCnChar <= 47296)) return "F";
else if ((iCnChar >= 47297) && (iCnChar <= 47613)) return "G";
else if ((iCnChar >= 47614) && (iCnChar <= 48118)) return "H";
else if ((iCnChar >= 48119) && (iCnChar <= 49061)) return "J";
else if ((iCnChar >= 49062) && (iCnChar <= 49323)) return "K";
else if ((iCnChar >= 49324) && (iCnChar <= 49895)) return "L";
else if ((iCnChar >= 49896) && (iCnChar <= 50370)) return "M";
else if ((iCnChar >= 50371) && (iCnChar <= 50613)) return "N";
else if ((iCnChar >= 50614) && (iCnChar <= 50621)) return "O";
else if ((iCnChar >= 50622) && (iCnChar <= 50905)) return "P";
else if ((iCnChar >= 50906) && (iCnChar <= 51386)) return "Q";
else if ((iCnChar >= 51387) && (iCnChar <= 51445)) return "R";
else if ((iCnChar >= 51446) && (iCnChar <= 52217)) return "S";
else if ((iCnChar >= 52218) && (iCnChar <= 52697)) return "T";
else if ((iCnChar >= 52698) && (iCnChar <= 52979)) return "W";
else if ((iCnChar >= 52980) && (iCnChar <= 53640)) return "X";
else if ((iCnChar >= 53689) && (iCnChar <= 54480)) return "Y";
else if ((iCnChar >= 54481) && (iCnChar <= 55289)) return "Z";
else return ("?");
}
// 测试用例
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(GetCharSpellCode("张"));
}
加载更多回复(5)
1.著名的引文索引检索工具SCI的中文全称是《科学引文索引》。 2.超星电子图书的读者可以选择的阅读方式是:阅读器阅读和网页阅读。 3.中国专利法在1985年开始实施 4.在会议文献中,常用英文哪个单词表示“专题讨论会”。(单词首字母,请大写)Workshop 5.在CNKI平台下,“主题”检索的内容,不包含以下哪个?(作者) 6.一本印刷的检索工具,其结构大体可以分为,三大部分:文前栏目、正文和书后附属部分 6.按约束力来划分,标准可以分为强制性标准和推荐性标准。 7.一般来说,我们把SCI、EI、ISTP称为,三大科技文献检索系统。 8.一个期刊被SCI收入后,会有一个WOS开头的入藏号。 9.广义的文献检索工具,可以分为:检索工具和【参考工具】。 10.《中图分类法》中,字母S代表的是“农业科学”,字母【T】代表的是“工业技术”。 11.按检索手段划分,文献检索工具可以分为手工检索工具和【机械检索】工具。 12.著名的引文索引检索工具SCI的中文全称是《科学引文索引》。 13.著名的SCI检索工具,其英文全称是:【Science Citation Index】。 14.判断一本国内期刊是否合法的一个简单方式是,查看该期刊的哪个信息?(CN) 15.按信息的出版类型分:学位论文,属于以下哪种信息源?(特殊文献) 16.Spischolar平台主要是搜索,哪种类型的参考文献?(电子学术论文) 17.政府出版物,从信息出版形式的角度看,属于以下哪类信息源?(特殊文献) 18.一般情况下,Open Access方式发表的文献,版权是归谁所有?(作者所有) 19.CPCI检索是针对哪种文献类型**(会议论文类型的文献)** 20.中科院文献情报中心,对JCR期刊按其影响因子和引用率,分类几个区?(4个) 21.引文检索除了实现信息评价外,还能达到**【信息检索】**的目的。 22.关键字是论文的组成部分,学术论文的关键字,其数量一般控制在:**(3-8)**个? 23.美国是在1976年的《著作权法案》,首次为合理使用制定了标准。 24.按《中国标准文献分类法》,其一级类目中“电子元件与信息技术”,用哪个字母表示?(L) 25.学术造假一般分为三类,分别是:伪造、篡改和造假。 26.百度、谷歌这样的搜索引擎,属于什么类型的搜索引擎【全文搜索引擎】 27.Compendex数据库是属于:【二次】文献数据库。 28.用户想要检索和下载“电子图书”,一般推荐选择哪个检索平台?【读秀】 29.书生之家平台上检索的文献类型主要是哪类?【电子图书文献】 30.不是Web of Science平台的主要期刊来源的是哪个?【EI】 31.防止学术剽窃,一般采取的方法有:教育、法律和科技手段。 32.在大多数情况下,检索的目的是为了找到 相关文献 ,而不是"答案"。 33.二八定律在期刊文献检索中的体现是:20%的期刊登载了80%的重要文献,体现这种特性的期刊是 核心期刊 。 34.文献的特性有 知识信息性 、 客观物质性 、 人工记录性 、 动态发展性 。 35.文献的 内容 特征用于找出相关文献, 外部 特征用于获得特定文献。 36.文献获取与利用的过程中存在三重语言障碍,分别为: 自然语言障碍 、 专业语言障碍 、 检索

62,065

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧