- 需求:联系人列表按照首字母排序
通常如果表设计的时候增加了对应的首字母字段显然很好实现,如果没加,应该如何实现!?
- 数据库创建 函数 执行以下代码
CREATE DEFINER=``@`` 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 V_NUM VARCHAR (2);
DECLARE FIRST_VARCHAR VARCHAR (1);
SET FIRST_VARCHAR = LEFT (CONVERT(P_NAME USING gbk), 1);
SELECT
FIRST_VARCHAR REGEXP '[a-zA-Z]' INTO V_BOOL;
SELECT
FIRST_VARCHAR REGEXP '[0-9]' INTO V_NUM;
IF V_BOOL = 1 THEN
SET V_RETURN = FIRST_VARCHAR;
ELSEIF V_NUM = 1 THEN
SET V_RETURN = '#';
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
- 执行完后会创建一个名为 fristPinyin函数
- sql 调用
SELECT real_name, fristPinyin(real_name) AS fristPinyin FROM ghy_address_list ORDER BY fristPinyin;
- 结果
转载请注明出处:BestEternity亲笔。