Mysql根据拼音首字母分组和排序

和手机通讯录一样根据首字母进行分组展示

1、运行下列SQL语句

CREATE DEFINER=`root`@`%` 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

2、运行上述SQL语句后生成新的函数方法

3、然后运行select语句

# name是进行排序的字段,spareparts是name所在表名,
select fristPinyin(name) firstName from spareparts;

运行后结果如下图:

4、现在可以查询一下,看看成功没有


结果如上图所示,是成功的

转载自:https://blog.csdn.net/ForeverAnt/article/details/111595765

posted @ 2021-07-08 23:42  kopok  阅读(350)  评论(0)    收藏  举报