创建一个函数:
CREATE FUNCTION `GET_FIRST_PINYIN_CHAR`(PARAM VARCHAR(255)) RETURNS varchar(2) CHARSET utf8
BEGIN
//定义返回值,用于接收结果
DECLARE V_RETURN VARCHAR(255);
//定义变量用于接收函数参数的左侧第一个字符
DECLARE V_FIRST_CHAR VARCHAR(2);
//left(str,index)表示获取左边前index个字符,upper()函数将字符串转为大写
SET V_FIRST_CHAR = UPPER(LEFT(PARAM,1));
SET V_RETURN = V_FIRST_CHAR;
//length()函数返回字符串长度(utf-8中中文三个字符,英文数字一个字符,其他编码统一为一个字符),
//CHARACTER_LENGTH()获取字符串字符数,这个函数里中英文数字都只算一个字符
//若length()函数获取的字符串长度不等于CHARACTER_LENGTH获取的字符串长度,即字符串为中文,那么进入下方then中
IF LENGTH( V_FIRST_CHAR) <> CHARACTER_LENGTH( V_FIRST_CHAR ) THEN
//CONVERT(PARAM USING gbk)将参数转为gbk字符集
//LEFT(CONVERT(PARAM USING gbk),1)将转换后的参数的第一个字符取出
//HEX(LEFT(CONVERT(PARAM USING gbk),1))将第一个字符转为16进制
//CONV(super,16,10)将上一步获取的16进制数转为10进制
//INTERVAL(super,
// 0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,
// 0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,
// 0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1) 将上一步的10进制数与参数列表中的16进制数作对比,找到上一步的//10进制数所在区间,例:小于第一个数即为0,小于第二个即为1
//elt(super, 'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z')
//根据上一步后去的区间索引super,获取第super个字符
SET V_RETURN = ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(PARAM 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
创建函数后应用,select GET_FIRST_PINYIN_CHAR(字符串)
其他更多函数可在菜鸟查看