賽迪網 > IT技術 數據庫 > 精彩更新
  IT資訊搜索
 
IT產品搜索
[程式開發][網管世界][網路安全][數據庫技術]
[作業系統][嘉賓聊天·線上訪談][活動集錦]
[精彩專題][Symantec專區][訂閱IT技術週刊]
[開發論壇][網管論壇][安全論壇][數據庫論壇]
[作業系統論壇][Sybase專區][IBM dW技術專區]
[病毒求助][病毒與漏洞播報][文檔·源碼下載]

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

發佈時間:2008.07.15 04:46     來源:賽迪網    作者:Ernest

【賽迪網-IT技術報道】需求

有些時候我們會有這樣的需求,要求使用字母從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

1 2 下一頁>>


[ 發表評論 ] 字體[  ] [ 列印 ] [ 進入博客 ] [ 進入論壇 ]  [ 推薦給朋友 ]
  相關文章
· DB2數據庫導出表結構與導入導出表數據 (07-11) · 講解捕獲IBM DB2 SQL的執行快照的方法 (07-07)
· DB2數據庫更新執行計劃的幾個常見的方法 (07-07) · 最簡單的SQL Server數據庫存儲過程分頁 (07-01)
· 全面解析IBM DB2數據庫移植的常見問題 (06-30) · 全面解析IBM DB2數據庫移植的常見問題 (06-30)
· DB2數據庫控制中心亂碼問題解決方法集合 (06-25) · DB2數據庫命令行處理器中的語句執行問題 (06-25)
· 在AIX HA環境中安裝DB2時的七個注意事項 (06-25) · 全面解析DB2性能調優方面的二十個疑難問題 (06-22)
  客戶需求反饋表
* 姓  名:
更多資料  了解方案  認識廠商
* 單位名稱:
* 聯繫電話:
* 電子郵件:
  賽迪推薦  
  手機·資費 ·新品·導購·評測·手機資費·寬帶
手機搜索  諾基亞 N73 MOTO Z6
  IT產品 ·筆記本·臺式機·伺服器·列印·投影
IT產品搜索 
  IT技術 ·開發·網管·安全·數據庫·作業系統
  資訊化 ·熱點·專題·訪談·週刊·方案案例
· 駭客病毒現身互聯網 個人數據資訊受威脅
· ERP實施過程中項目管理失控的幾種表現
· 首屆贏在軟體創富大賽 SOA技術+應用
· 個人理財合規系統方案 方正電子公文系統
  IT博客 ·曾劍秋·項立剛·Java學習·網管
  IT技術論壇 ·開發·網管·安全·數據庫·系統