首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 虚拟主机评测对比
在DB2 中创建一个获取汉字拼音首字母的SQL 函数-数据库专栏,DB2
作者:网友供稿 点击:14
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
原文出处: http://www.aiview.com/notes/index_of_chinese.htm
作者: 张洋 alex_doesathotmail.com
最后更新: 2003-12-25
 目录 需求 工作原理 实现 参考资源
  需求
有些时候我们会有这样的需求,要求使用字母从a至z对一组数据进行索引,如果数据的格式全部是半角的英文则很容易实现,但若是对一组中文数据进行索引则会引起一点小的麻烦,数据在录入数据库的时候可能并没有指定一个索引字母,这就要求应用程序可以自动生成用于索引的信息。

一般对于中文数据的索引,采用词组的首汉字拼音的首字母,例如:

词组 索引字母
--- -----
熊猫 x
白暨豚 b
藏野驴 z

在db2中并没有提供相应的函数可以取得汉字拼音的首字母,我们可以利用数据库针对中文字符集的排序功能创建一个这样的函数。
工作原理
我们知道在使用中文字符集的数据库中,当你对一列中文数据使用order by 排序时,排序的结果正是按照每行记录第一个汉字的拼音首字母进行排列的,那么我们需要想办法取得这个字母。
但是数据库内部是如何做到这一点的呢?以中文字符集gbk为例,让我们查看一下gbk字符集的内码表,我们仅摘出一段:

0 1 2 3 4 5 6 7 8 9 a b c d e f 
b040 癅 癆 癇 癈 癉 癊 癋 癎 癏 癐 癑 癒 癓 癕 癗 癘 
b050 癙 癚 癛 癝 癟 癠 癡 癢 癤 癥 癦 癧 癨 癩 癪 癬 
b060 癭 癮 癰 癱 癲 癳 癴 癵 癶 癷 癹 発 發 癿 皀 皁 
b070 皃 皅 皉 皊 皌 皍 皏 皐 皒 皔 皕 皗 皘 皚 皛 
b080 皜 皝 皞 皟 皠 皡 皢 皣 皥 皦 皧 皨 皩 皪 皫 皬 
b090 皭 皯 皰 皳 皵 皶 皷 皸 皹 皺 皻 皼 皽 皾 盀 盁 
b0a0 盃 啊 阿 埃 挨 哎 唉 哀 皑 癌 蔼 矮 艾 碍 爱 隘 
b0b0 鞍 氨 安 俺 按 暗 岸 胺 案 肮 昂 盎 凹 敖 熬 翱 
b0c0 袄 傲 奥 懊 澳 芭 捌 扒 叭 吧 笆 八 疤 巴 拔 跋 
b0d0 靶 把 耙 坝 霸 罢 爸 白 柏 百 摆 佰 败 拜 稗 斑 
b0e0 班 搬 扳 般 颁 板 版 扮 拌 伴 瓣 半 办 绊 邦 帮 
b0f0 梆 榜 膀 绑 棒 磅 蚌 镑 傍 谤 苞 胞 包 褒 剥 

可以看到从b0a0-1 开始,至b0c0-5,是拼音a开头的汉字,恰好是按照拼音字母的先后顺序排列,并且把音调的因素也考虑进去了,由此,可以推断出,数据库在gbk编码的数据库中对汉字进行排序,即是依照字符内码表的编码进行的。
我们把b0c0-5 位置的汉字记录下来,即“澳”字,这是以“a”拼音开头在内码表中排列在最后的汉字,用同样的方法,我们找出所有以拼音从b至z开头,在内码表中排列在最后的汉字,与26个字母的对应关系如下:

澳 a
怖 b
错 c
堕 d
贰 e
咐 f
过 g
祸 h
i
骏 j
阔 k
络 l
穆 m
诺 n
沤 o
瀑 p
群 q
弱 r
所 s
唾 t
u
v
误 w
迅 x
孕 y
座 z

注:没有以i,u,v开头的汉语拼音。

现在假若我们拿出任何一个汉字,放在我们挑选出的这些汉字中间,利用数据库进行一次使用gbk字符集的排序,我们便能够根据这个汉字排列的相对位置得到其拼音首字母。

利用sql语句生成一组上述汉字的结果集,我们将i,u,v 三个空缺汉字的位置补上了上一个拼音的汉字,

select t1.strchn 
from ( select 澳 strchn from sysibm.sysdummy1 
union all 
select 怖 strchn from sysibm.sysdummy1 
union all 
select 错 strchn from sysibm.sysdummy1 
union all 
select 堕 strchn from sysibm.sysdummy1 
union all 
select 贰 strchn from sysibm.sysdummy1 
union all 
select 咐 strchn from sysibm.sysdummy1 
union all 
select 过 strchn from sysibm.sysdummy1 
union all 
select 祸 strchn from sysibm.sysdummy1 
union all 
select 祸 strchn from sysibm.sysdummy1 
union all 
select 骏 strchn from sysibm.sysdummy1 
union all 
select 阔 strchn from sysibm.sysdummy1 
union all 
select 络 strchn from sysibm.sysdummy1 
union all 
select 穆 strchn from sysibm.sysdummy1 
union all 
select 诺 strchn from sysibm.sysdummy1 
union all 
select 沤 strchn from sysibm.sysdummy1 
union all 
select 瀑 strchn from sysibm.sysdummy1 
union all 
select 群 strchn from sysibm.sysdummy1 
union all 
select 弱 strchn from sysibm.sysdummy1 
union all 
select 所 strchn from sysibm.sysdummy1 
union all 
select 唾 strchn from sysibm.sysdummy1 
union all 
select 唾 strchn from sysibm.sysdummy1 
union all 
select 唾 strchn from sysibm.sysdummy1 
union all 
select 误 strchn from sysibm.sysdummy1 
union all 
select 迅 strchn from sysibm.sysdummy1 
union all 
select 孕 strchn from sysibm.sysdummy1 
union all 
select 座 strchn from sysibm.sysdummy1 
) as t1
实现
接下来很方便的就可以写出这个函数的具体实现,在实现的代码中,我们又加入了针对英文字母的处理,函数编译后,可通过如下方式调用:

select getindex( 索 ) index from dual;

index
------
f

下载代码


实际使用中,应注意建立数据库时字符集参数的设置,应使用gbk字符集。
应用以下命令查看已建立数据库的字符集:

db2 connect to db_name user user_name using password
db2 get db cfg | grep -i code set

此参数在数据库建立之后不能修改。
参考资源
下载函数的源代码
gbk 字符集编码表:
http://www.khngai.com/chinese/charmap/tblgbk.php?page=0



文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·Asp.Net下导出/导入规则的Excel(.xls)文件-ASP教程,ASP应用
·中国万网,万网
·中资源
·上海火速
·加拿大中文网
·华夏名网
·世纪东方
·商务中国
·中国E动网
·神话网络
最新文章
·photoshop抠图合成特效:飞出照片相框_photoshop教程
·将升级的windows vista驱动还原到原来的版本_windows vista
·photoshop漫画笔刷绘制非主流照片漫画_photoshop教程
·看域名注册信息判断网赚公司真假_网赚技巧
·找坐标:对网站进行坐标定位_站长心得
·如何增加网站pv_站长心得
·google性格一:对活跃度高的网页收录很快_google推广
·googleadsense容易被k的可能性列表_google推广
·价值数万的googlepr作弊方_google推广
·如何抢占人家的“首要意念”_google推广
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭