亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > DB2 > 正文

在DB2 中創建一個獲取漢字拼音首字母的SQL 函數

2024-09-06 23:58:05
字體:
來源:轉載
供稿:網友

版權聲明: 本文可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息。
原文出處: 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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产手机视频精品| 国外成人免费在线播放| 精品亚洲国产成av人片传媒| 91色p视频在线| 久久久久久尹人网香蕉| 97国产精品久久| 精品国产一区二区三区四区在线观看| 成人欧美一区二区三区在线| 成人xxxx视频| 久久精品国产v日韩v亚洲| 久久韩剧网电视剧| 亚洲美女av在线| 国模精品视频一区二区| 国产精自产拍久久久久久| 一区二区三区亚洲| 午夜精品久久久久久久99热浪潮| 色偷偷偷亚洲综合网另类| 欧美性jizz18性欧美| 国产欧美在线看| 亚洲综合日韩中文字幕v在线| 国产成人福利网站| 欧美黑人狂野猛交老妇| 亚洲人成电影网站色xx| 亚洲男人天堂2023| 日本久久中文字幕| 亚洲欧美日韩中文视频| 欧美成人黑人xx视频免费观看| 精品久久国产精品| 久久99热这里只有精品国产| 日韩av网站大全| 亚洲系列中文字幕| 国产精品激情av电影在线观看| 国产精品久久久久久久久久久久久久| 国产欧美一区二区三区在线看| 狠狠躁夜夜躁人人爽天天天天97| 日韩在线观看精品| 欧美成aaa人片免费看| 国产大片精品免费永久看nba| 日韩在线视频免费观看高清中文| 色偷偷888欧美精品久久久| 成人精品网站在线观看| 欧美日韩在线第一页| 日韩av中文在线| 久久亚洲精品一区二区| 亚洲福利精品在线| 精品亚洲一区二区三区四区五区| 亚洲欧洲第一视频| 亚洲精品国产品国语在线| 日韩在线小视频| 91美女福利视频高清| 91精品国产沙发| 日本电影亚洲天堂| 久久躁狠狠躁夜夜爽| 亚洲激情在线观看| 中文字幕亚洲色图| 疯狂蹂躏欧美一区二区精品| 久久视频中文字幕| www.色综合| 成人激情电影一区二区| 亚洲欧洲av一区二区| 欧美日韩亚洲激情| 亚洲欧美色婷婷| 欧美成人激情视频免费观看| 色狠狠久久aa北条麻妃| 日韩视频在线免费观看| 色综合伊人色综合网| 国产日韩在线免费| 欧美区二区三区| 午夜精品一区二区三区在线| 欧美专区在线播放| 国产精品久久久久久久一区探花| 欧美性猛交xxxx乱大交蜜桃| 欧美老女人bb| 欧美在线视频免费观看| 亚洲第一精品久久忘忧草社区| 91av在线精品| 亚洲精品美女久久| 亚洲成人精品视频在线观看| 国产精品福利在线观看网址| 91久久久久久久久久久| 国产精品欧美激情在线播放| 伊人男人综合视频网| 国产91热爆ts人妖在线| 欧美日韩国产成人在线| 欧美国产极速在线| 欧美日韩国产影院| 日韩欧美在线观看视频| 色噜噜狠狠狠综合曰曰曰88av| 亚洲一区二区三区久久| 一区二区欧美在线| 亚洲第一色在线| 亚洲精品视频久久| 日韩在线观看免费高清| 亚洲天堂av在线播放| 国产精品久久久久久久9999| 久久夜精品va视频免费观看| 日韩av不卡在线| 国产精品久久综合av爱欲tv| 亚洲欧美精品suv| 亚洲第一黄色网| 另类视频在线观看| 国产精品av电影| 欧美成人激情在线| 欧洲精品毛片网站| 欧美日韩国产一中文字不卡| 欧美多人乱p欧美4p久久| 91色精品视频在线| 57pao国产成人免费| 一区二区三区 在线观看视| 国产成人精品网站| 97精品国产aⅴ7777| 国产精品va在线播放| 美女av一区二区三区| 亚洲国产精品资源| 国产人妖伪娘一区91| 中文在线不卡视频| 久久国产精品久久久久久| 色婷婷综合成人av| 欧美日韩美女视频| 在线日韩日本国产亚洲| 欧美激情精品久久久久久蜜臀| 国产www精品| 亚洲美女av黄| 国产精品久久77777| 亚洲xxxxx| 国产精品成av人在线视午夜片| 国产日本欧美视频| 亚洲精品永久免费精品| 国产精品久久久久久久久久99| 国产精品久久久久久五月尺| 欧美日韩aaaa| 亚洲第一福利视频| 98精品国产自产在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 欧美高清电影在线看| 亚洲社区在线观看| 欧美尺度大的性做爰视频| 影音先锋欧美在线资源| 一区二区三区天堂av| 精品magnet| 91精品国产网站| 日韩精品999| 亚洲黄色av网站| 91最新在线免费观看| 欧美电影免费播放| 91视频九色网站| 国产亚洲欧美aaaa| 国产成人精品综合久久久| 欧美性理论片在线观看片免费| 国产精品精品一区二区三区午夜版| 欧美劲爆第一页| 欧美一区二区三区四区在线| 中文字幕v亚洲ⅴv天堂| 国产精品日韩在线播放| 精品人伦一区二区三区蜜桃免费| 国产精品成av人在线视午夜片| 一本色道久久88亚洲综合88| 色爱精品视频一区| 国产欧美日韩丝袜精品一区| 欧美一级视频免费在线观看| 欧美一区三区三区高中清蜜桃| 性色av一区二区三区| 国产精品电影观看| 在线看欧美日韩|