
MySQL按照漢字的拼?排序、按照?字母分類
項?中有時候需要按照漢字的拼?排序,?如聯系?列表、礦物分類等,有的還需要按拼?字母從A到Z分類顯?。
如果存儲漢字的字段編碼使?的是GBK字符集,因為GBK內碼編碼時本?就采?了拼?排序的?法(常??級漢字3755個采?拼?排
序,?級漢字就不是了,但考慮到?名等都是常?漢字,因此只是針對?級漢字能正確排序也夠?了),直接在查詢語句后?添加ORDER
BYnameASC,查詢結果將按照姓?的升序排序;如果存儲姓名的字段采?的是utf8字符集,需要在排序的時候對字段進?轉碼,對應的代
碼是ORDERBYconvert(nameusinggbk)ASC,同樣,查詢的結果也是按照姓?的升序排序。
按拼??字母分類顯?的時候,需要借助?個中間表,存儲的是字母對應的漢字的編碼范圍,這樣的話,每次取出漢字然后跟中間表?
對就可以了,中間表創建和插?數據的SQL如下:
/*
NavicatMySQLDataTransfer
TargetServerType:MYSQL
TargetServerVersion:50617
FileEncoding:65001
Date:2015-07-0211:12:15
*/
SETFOREIGN_KEY_CHECKS=0;
------------------------------
--Tablestructurefort_coslers
------------------------------
DROPTABLEIFEXISTS`t_coslers`;
CREATETABLE`t_coslers`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`f_PY`char(1)CHARACTERSETutf8DEFAULTNULL,
`cBegin`smallint(5)unsignedNOTNULL,
`cEnd`smallint(5)unsignedNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=24DEFAULTCHARSET=latin1;
------------------------------
--Recordsoft_coslers
------------------------------
INSERTINTO`t_coslers`VALUES('1','A','45217','45252');
INSERTINTO`t_coslers`VALUES('2','B','45253','45760');
INSERTINTO`t_coslers`VALUES('3','C','45761','46317');
INSERTINTO`t_coslers`VALUES('4','D','46318','46825');
INSERTINTO`t_coslers`VALUES('5','E','46826','47009');
INSERTINTO`t_coslers`VALUES('6','F','47010','47296');
INSERTINTO`t_coslers`VALUES('7','G','47297','47613');
INSERTINTO`t_coslers`VALUES('8','H','47614','48118');
INSERTINTO`t_coslers`VALUES('9','J','48119','49061');
INSERTINTO`t_coslers`VALUES('10','K','49062','49323');
INSERTINTO`t_coslers`VALUES('11','L','49324','49895');
INSERTINTO`t_coslers`VALUES('12','M','49896','50370');
INSERTINTO`t_coslers`VALUES('13','N','50371','50613');
INSERTINTO`t_coslers`VALUES('14','O','50614','50621');
INSERTINTO`t_coslers`VALUES('15','P','50622','50905');
INSERTINTO`t_coslers`VALUES('16','Q','50906','51386');
INSERTINTO`t_coslers`VALUES('17','R','51387','51445');
INSERTINTO`t_coslers`VALUES('18','S','51446','52217');
INSERTINTO`t_coslers`VALUES('19','T','52218','52697');
INSERTINTO`t_coslers`VALUES('20','W','52698','52979');
INSERTINTO`t_coslers`VALUES('21','X','52980','53640');
INSERTINTO`t_coslers`VALUES('22','Y','53689','54480');
INSERTINTO`t_coslers`VALUES('23','Z','54481','55289');
借助中間表查詢漢字?字母的?例SQL如下(utf8字符集):
,,t2.f_PY
FROMt_urt1,t_coslerst2
WHERECONV(HEX(LEFT(CONVERT(INGgbk),1)),16,10)
ORDERBYconvert(inggbk)ASC
需要注意的?點是,上述的排序、分類?法對多?字的?持并不是很好,要求?精度的同學慎?。
本文發布于:2023-03-12 10:13:19,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1678587199138536.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:按拼音排序.doc
本文 PDF 下載地址:按拼音排序.pdf
| 留言與評論(共有 0 條評論) |