1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > mysql 按汉字拼音首字母排序或聚合

mysql 按汉字拼音首字母排序或聚合

时间:2019-08-10 22:17:57

相关推荐

mysql 按汉字拼音首字母排序或聚合

看网上很多方法,都是转成gbk,然后截取第一个字,然后按字的gbk值的区间去获取A-Z,然后排序。

ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(TRIM(列名) USING gbk),1)),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')

不用utf8,是因为字符集里,huf8是按汉字笔画一个个排,gbk是按拼音顺序给汉字排号。

所以相对来说,gbk比uft8更简单。

但是有个问题,gbk里一开始存储的汉字数量有限,导致有一批数是在后来加进去的,并未在之前的拼音排序内,比如

泗涞婺麒邳鑫闵 …………

导致在转化成拼音首字母时,都是“Z”。

(还有些第一个字符是数字或者字符的,这些另说)

网上也有看到解决办法,要搞个新表,然后写个function,然后巴拉巴拉

我嫌麻烦,而且我工作中用到的这类的特殊字其实很有限。每次全量更新数据的时候,字还是那些字(大多数是地名,还是限定区域的,顶多来几个新的,再处理处理呗)。

所以,为了方便自己以后操作,特地梳理了一下不在gbk顺序里的我常用的字,直接写好了sql,以后我的那张表全表更新后,直接run一下这些sql即可,反正已经加了一个字段“pinyin”,专门保存是A还是Z还是其他数字字符“其他”:

UPDATE 表 SET pinyin = ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(TRIM(列名) USING gbk),1)),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');UPDATE 表 SET pinyin = UPPER(LEFT(CONVERT(TRIM(列名) USING gbk),1)) WHERE pinyin IS NULL;UPDATE 表 SET pinyin = '其他' WHERE pinyin NOT IN ('A','B','C','D','E','F','G','H','J','K','L','M','N','O','P', 'Q','R','S','T','W','X','Y','Z','i','I','U','V');UPDATE 表 SET pinyin = 'C' WHERE 列名 LIKE '重庆%';UPDATE 表 SET pinyin = 'M' WHERE 列名 LIKE '渑池%';UPDATE 表 SET pinyin = 'X' WHERE 列名 LIKE '荥阳%';UPDATE 表 SET pinyin = 'L' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) in ('醴','蠡','漯','涞','浏','泸','崂','栾');UPDATE 表 SET pinyin = 'W' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('婺');UPDATE 表 SET pinyin = 'D' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('宕');UPDATE 表 SET pinyin = 'M' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('闵','岷');UPDATE 表 SET pinyin = 'J' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('莒','旌','泾');UPDATE 表 SET pinyin = 'S' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('濉','泗','歙','汜','沭');UPDATE 表 SET pinyin = 'T' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('钛','滕');UPDATE 表 SET pinyin = 'X' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('鑫','潇');UPDATE 表 SET pinyin = 'P' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('郫','邳','濮');UPDATE 表 SET pinyin = 'G' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('藁','珙');UPDATE 表 SET pinyin = 'B' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('璧');UPDATE 表 SET pinyin = 'Y' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('黟','颍','鄞');UPDATE 表 SET pinyin = 'H' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('邗');UPDATE 表 SET pinyin = 'Q' WHERE LEFT(CONVERT(TRIM(列名) USING gbk),1) IN ('麒','邛','谯','衢','蕲');

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。