sql按拼音排序
sql按拼音排序
select * from user order by name collate Chinese_PRC_CS_AS_KS_WS
二.排序規(guī)則簡(jiǎn)介:
??? 什么叫排序規(guī)則呢?ms是這樣描述的:"在 microsoft sql server 2000 中,
字符串的物理存儲(chǔ)由排序規(guī)則控制。排序規(guī)則指定表示每個(gè)字符的位模式以及存
儲(chǔ)和比較字符所使用的規(guī)則。"
在查詢(xún)分析器內(nèi)執(zhí)行下面語(yǔ)句,可以得到sql server支持的所有排序規(guī)則。
select * from ::fn_helpcollations()
排序規(guī)則名稱(chēng)由兩部份構(gòu)成,前半部份是指本排序規(guī)則所支持的字符集。
如:
chinese_prc_cs_ai_ws?
前半部份:指unicode字符集,chinese_prc_指針對(duì)大陸簡(jiǎn)體字unicode的排序規(guī)則。
排序規(guī)則的后半部份即后綴 含義:?
_bin 二進(jìn)制排序?
_ci(cs) 是否區(qū)分大小寫(xiě),ci不區(qū)分,cs區(qū)分
_ai(as) 是否區(qū)分重音,ai不區(qū)分,as區(qū)分
_ki(ks) 是否區(qū)分假名類(lèi)型,ki不區(qū)分,ks區(qū)分
??? _wi(ws) 是否區(qū)分寬度 wi不區(qū)分,ws區(qū)分
區(qū)分大小寫(xiě):如果想讓比較將大寫(xiě)字母和小寫(xiě)字母視為不等,請(qǐng)選擇該選項(xiàng)。
區(qū)分重音:如果想讓比較將重音和非重音字母視為不等,請(qǐng)選擇該選項(xiàng)。如果選擇該選項(xiàng),
???????? 比較還將重音不同的字母視為不等。
區(qū)分假名:如果想讓比較將片假名和平假名日語(yǔ)音節(jié)視為不等,請(qǐng)選擇該選項(xiàng)。
區(qū)分寬度:如果想讓比較將半角字符和全角字符視為不等,請(qǐng)選擇該選項(xiàng)
三.排序規(guī)則的應(yīng)用:
sql server提供了大量的windows和sqlserver專(zhuān)用的排序規(guī)則,但它的應(yīng)用往往
被開(kāi)發(fā)人員所忽略。其實(shí)它在實(shí)踐中大有用處。
例1:讓表name列的內(nèi)容按拼音排序:
create table #t(id int,name varchar(20))
insert #t select 1,中
union all select 2,國(guó)
union all select 3,人
union all select 4,阿
select * from #t order by name collate chinese_prc_cs_as_ks_ws?
drop table #t
/*結(jié)果:
id????????? name??????????????? ?
----------- --------------------?
4?????????? 阿
2?????????? 國(guó)
3?????????? 人
1?????????? 中
*/
例2:讓表name列的內(nèi)容按姓氏筆劃排序:
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
/*結(jié)果:
id????????? name??????????????? ?
----------- --------------------?
4?????????? 一
2?????????? 乙
3?????????? 二
5?????????? 十
1?????????? 三
*/
四.在實(shí)踐中排序規(guī)則應(yīng)用的擴(kuò)展
sql server漢字排序規(guī)則可以按拼音、筆劃等排序,那么我們?nèi)绾卫眠@種功能
來(lái)處理漢字的一些難題呢?我現(xiàn)在舉個(gè)例子:
用排序規(guī)則的特性計(jì)算漢字筆劃
要計(jì)算漢字筆劃,我們得先做準(zhǔn)備工作,我們知道,windows多國(guó)漢字,unicode目前
收錄漢字共20902個(gè)。簡(jiǎn)體gbk碼漢字unicode值從19968開(kāi)始。
首先,我們先用sqlserver方法得到所有漢字,不用字典,我們簡(jiǎn)單利用sql語(yǔ)句就
可以得到:
select top 20902 code=identity(int,19968,1) into #t from syscolumns a,syscolumns b
再用以下語(yǔ)句,我們就得到所有漢字,它是按unicode值排序的:
select code,nchar(code) as cnword from #t
然后,我們用select語(yǔ)句,讓它按筆劃排序。
select code,nchar(code) as cnword?
from #t?
order by nchar(code) collate chinese_prc_stroke_cs_as_ks_ws,code
結(jié)果:
code??????? cnword?
本文章出處 http://www.itphome.cn/shujukuyingyong/mssql/2010-01-27/106.html
轉(zhuǎn)載于:https://www.cnblogs.com/irelands/archive/2013/04/26/3044212.html
總結(jié)
- 上一篇: python类库32[多线程同步Lock
- 下一篇: 轮廓处理函数详细