Sqlserver 按漢字首字母排序 sql語句

2021-09-25 13:35:24 字數 2262 閱讀 6689

sql server中可以直接通過sql語句實現按漢字首字母排序,比如我們經常用到的"按姓名首字母排序"

--把tablename和colname換成自己的就ok了

--按拼音

alter

table tablename

alter

column colname nvarchar(

100)

collate chinese_prc_ci_as

select

*from tablename order

by colname

--按筆畫

alter

table tablename

alter

column colname nvarchar(

100)

collate chinese_prc_stroke_ci_as

select

*from tablename order

by colname

說明:

alter:修改表

collate:是乙個子句,可應用於資料庫定義或列定義以定義排序規則,或應用於字串表示式以應用排序規則投影。

chinese_prc_ci_as:一種sql排序規則

下面簡單介紹一下排序規則:

什麼叫排序規則呢?ms是這樣描述的: "在sql server中,

字串的物理儲存由排序規則控制。排序規則指定表示每個字元的位模式以及儲存和比較字元所使用的規則。

在查詢分析器內執行下面語句,可以得到sql server支援的所有排序規則。

select

*from ::fn_helpcollations(

)//sql server 有1011種排序規則

排序規則名稱由兩部份構成,前半部份是指本排序規則所支援的字符集。

如:

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區分

區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。

區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,比較還將重音不同的字母視為不等。

區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。

區分寬度:如果想讓比較將半形字元和全形字符視為不等,請選擇該選項。

oracle9i中新增了按照拼音、部首、筆畫排序功能。設定nls_sort

舉例如下:

表名為dept,其中name欄位是中文,下面分別實現按照單位名稱的筆劃、部首和拼音排序。

//按照筆劃排序

select

*from dept order

by nlssort(name,

'nls_sort=schinese_stroke_m');

//按照部首排序

select

*from dept order

by nlssort(name,

'nls_sort=schinese_radical_m');

//按照拼音排序,此為系統的預設排序方式

select

*from dept order

by nlssort(name,

'nls_sort=schinese_pinyin_m'

);

select

*from

table

order

by name collate chinese_prc_cs_as_ks_ws

漢字首字母

在很多軟體中,輸入拼音的首寫字母就可以快速定位到某個詞條。比如,在鐵路售票軟體中,輸入 bj 就可以定位到 北京 怎樣在自己的軟體中實現這個功能呢?問題的關鍵在於 對每個漢字必須能計算出它的拼音首字母。gb2312漢字編碼方式中,一級漢字的3755個是按照拼音順序排列的。我們可以利用這個特徵,對常用...

取漢字首字母

public function hz2py byval hz as string as string dim sarr as byte system.text.encoding.default.getbytes hz dim len as integer sarr.length if len 1 t...

提取漢字首字母

using system using system.collections.generic using system.text namespace stringoption return mystr 把提取的字母變成大寫 需要轉換的字串 轉換結果 public static string getlo...