在資料庫中需要根據使用者名稱按a-z排序;
因為我們通常使用的編碼都是utf-8;所以直接排序並不是按照我們所期待的拼音從a-z排序;我們需要將字元轉換成gbk即可;
select
*from tb_user order
byconvert
(tb_user.
`name`
using gbk)
;
這種方式可以簡單粗暴的完成我們的需求,但是有乙個缺陷就是英文會排在所有中文前面;
通過編寫函式,提取字元的首字母再排序;
create
function
`getfirstpinyin`
(p_name varchar
(255))
returns
varchar
(255
)charset utf8
deterministic
begin
declare v_return varchar
(255
)default'';
declare v_bool int
default0;
declare first_varchar varchar(1
);declare varchar_len int
default0;
declare gbk_str varchar
(255
)default'';
declare i int
default1;
declare temp_str varchar(16
)default'';
declare curr_str varchar(16
)default'';
set gbk_str =
convert
(ltrim(p_name)
using gbk)
;set varchar_len = character_length(gbk_str)
;while i <= varchar_len do
set curr_str = substring(gbk_str,i,1)
;set i = i +1;
if curr_str !=
' 'then
set temp_str =
repeat
(curr_str,1)
;select temp_str regexp
'[a-za-z0-9]'
into v_bool;
if v_bool =
0then
set temp_str = elt(
interval
(conv(hex(
convert
(curr_str using gbk)),
16,10)
,0xb0a1
,0xb0c5
,0xb2c1
,0xb4ee
,0xb6ea
,0xb7a2
,0xb8c1
,0xb9fe
,0xbbf7
,0xbfa6
,0xc0ac
,0xc2e8
,0xc4c3
,0xc5b6
,0xc5be
,0xc6da
,0xc8bb
,0xc8f6
,0xcbfa
,0xcdda
,0xcef4
,0xd1b9
,0xd4d1),
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'w',
'x',
'y',
'z')
;endif;
set v_return = concat(v_return,ifnull(temp_str,'')
);endif
;end
while
;return v_return;
end;
select
*from tb_user order
by getfirstpinyin(tb_user.
`name`
);
每次查詢都要呼叫函式;如果資料量較大,則會出現慢sql;
建議新增乙個資料庫字段,用於儲存字元的拼音首字母;再新增的時候呼叫函式插入資料庫;然後在查詢的時候直接按指定字段排序即可。
java中英文獲取首字母
package com.ijushang.shop.util author shiyz creation date 2012 10 25 上午11 01 34 public class getpinyin public getpinyin 字母z使用了兩個標籤,這裡有 個值 i,u,v都不做聲母,跟...
中文轉拼音 中英文首字母提取
import net.sourceforge.pinyin4j.pinyinhelper import net.sourceforge.pinyin4j.format.hanyupinyincasetype import net.sourceforge.pinyin4j.format.hanyupi...
獲取漢字拼音首字母
有個專案需要用到生成漢字的首字母,但從網上查了一下,對於多音字的處理都不是很好,所以就利用pinyin4j這個工具包自己寫了乙個。用到的jar包是pinyin4j 2.5.0.jar 獲取拼音首字母,多音字用逗號隔開 public static string getfirstspell string...