您的位置:首页 > 数据库 > MySQL

利用MySQL数据库来处理中英文取首字母排序

2015-12-14 00:00 337 查看
摘要: 很久都没有写博客了, 但是也积攒了了很多的问题, 下次找个时间一起整理一下, 然后记录下来, 以备不时之需.

我们的联系人列表经常会有按照首字母排序的需求. 这个很方便, 很清晰, 如果不说性能如何, 就像让数据库来做呢? 其实MySQL是支持的.

DELIMITER $$


CREATE

FUNCTION

`fristPinyin`(P_NAME

VARCHAR

(255))

RETURNS

varchar

(255) CHARSET utf8


DETERMINISTIC


BEGIN



DECLARE

V_RETURN

VARCHAR

(255);



DECLARE

V_BOOL

INT

DEFAULT

0;


  

DECLARE

FIRST_VARCHAR

VARCHAR

(1);



SET

FIRST_VARCHAR= 

left

(

CONVERT

(P_NAME USING gbk),1);



SELECT

FIRST_VARCHARREGEXP 

'[a-zA-Z]'

INTO

V_BOOL;



IF V_BOOL= 1 

THEN


  

SET

V_RETURN= FIRST_VARCHAR;



ELSE


  

SET

V_RETURN= ELT(INTERVAL(CONV(HEX(

left

(

CONVERT

(P_NAME 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'

);



END

IF;



RETURN

V_RETURN;


END

$$


DELIMITER;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: