隨筆-200  評論-148  文章-15  trackbacks-0
          sql按拼音排序

          select * from user order by name collate Chinese_PRC_CS_AS_KS_WS

          二.排序規則簡介:

              什么叫排序規則呢?ms是這樣描述的:"在 microsoft sql server 2000 中,
          字符串的物理存儲由排序規則控制。排序規則指定表示每個字符的位模式以及存
          儲和比較字符所使用的規則。"
          在查詢分析器內執行下面語句,可以得到sql server支持的所有排序規則。

          select * from ::fn_helpcollations()

          排序規則名稱由兩部份構成,前半部份是指本排序規則所支持的字符集。
          如:
          chinese_prc_cs_ai_ws
          前半部份:指unicode字符集,chinese_prc_指針對大陸簡體字unicode的排序規則。
          排序規則的后半部份即后綴 含義:
          _bin 二進制排序
          _ci(cs) 是否區分大小寫,ci不區分,cs區分
          _ai(as) 是否區分重音,ai不區分,as區分   
          _ki(ks) 是否區分假名類型,ki不區分,ks區分 
              _wi(ws) 是否區分寬度 wi不區分,ws區分 

          區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。
          區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,
                   比較還將重音不同的字母視為不等。
          區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。
          區分寬度:如果想讓比較將半角字符和全角字符視為不等,請選擇該選項


          三.排序規則的應用:
          sql server提供了大量的windows和sqlserver專用的排序規則,但它的應用往往
          被開發人員所忽略。其實它在實踐中大有用處。

          例1:讓表name列的內容按拼音排序:

          create table #t(id int,name varchar(20))
          insert #t select 1,中
          union all select 2,國
          union all select 3,人
          union all select 4,阿

          select * from #t order by name collate chinese_prc_cs_as_ks_ws
          drop table #t
          /*結果:
          id          name                 
          ----------- --------------------
          4           阿
          2           國
          3           人
          1           中
          */

          例2:讓表name列的內容按姓氏筆劃排序:

          create table #t(id int,name varchar(20))

          insert #t select 1,三
          union all select 2,乙
          union all select 3,二
          union all select 4,一
          union all select 5,十
          select * from #t order by name collate chinese_prc_stroke_cs_as_ks_ws
          drop table #t
          /*結果:
          id          name                 
          ----------- --------------------
          4           一
          2           乙
          3           二
          5           十
          1           三
          */

          四.在實踐中排序規則應用的擴展
          sql server漢字排序規則可以按拼音、筆劃等排序,那么我們如何利用這種功能
          來處理漢字的一些難題呢?我現在舉個例子:

          用排序規則的特性計算漢字筆劃

          要計算漢字筆劃,我們得先做準備工作,我們知道,windows多國漢字,unicode目前
          收錄漢字共20902個。簡體gbk碼漢字unicode值從19968開始。
          首先,我們先用sqlserver方法得到所有漢字,不用字典,我們簡單利用sql語句就
          可以得到:

          select top 20902 code=identity(int,19968,1) into #t from syscolumns a,syscolumns b

          再用以下語句,我們就得到所有漢字,它是按unicode值排序的:

          select code,nchar(code) as cnword from #t

          然后,我們用select語句,讓它按筆劃排序。

          select code,nchar(code) as cnword
          from #t
          order by nchar(code) collate chinese_prc_stroke_cs_as_ks_ws,code

          結果:
          code        cnword



          本文章出處 http://www.itphome.cn/shujukuyingyong/mssql/2010-01-27/106.html
          posted on 2010-10-12 11:21 無聲 閱讀(3603) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 江津市| 秭归县| 视频| 莫力| 莱西市| 留坝县| 葫芦岛市| 平塘县| 斗六市| 运城市| 宜春市| 湖北省| 大理市| 平塘县| 阳曲县| 开原市| 富裕县| 栾城县| 深水埗区| 镶黄旗| 哈尔滨市| 开原市| 湟源县| 广水市| 南康市| 武强县| 凯里市| 普陀区| 南川市| 汽车| 日喀则市| 巴东县| 察雅县| 阜城县| 信阳市| 贺州市| 山丹县| 维西| 体育| 浦东新区| 鹿邑县|