DB2中创建一个获取汉字拼音首字母的SQL函数(一)

日期: 2008-07-16 作者:Ernest 来源:TechTarget中国 英文

有些时候我们会有这样的需求,要求使用字母从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

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

Ernest
Ernest

相关推荐

  • Azure数据湖分析从U-SQL中获得提升

    大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。

  • TT百科:SQL(结构化查询语言)

    一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。

  • SQL和NoSQL数据库设计之争

    企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。

  • 数据库产品巡礼:IBM DB2概览

    IBM DB2关系型数据库管理系统提供了支持多平台系统的关键技术,它具备较高的可用性和良好的性能。