mysql生成首字母简拼

应用于mysql数据库,根据用户姓名生成对应首字母简拼,实现方式如下:

实现代码

1.创建存储过程GET_JP()

DROP FUNCTION IF	EXISTS `GET_JP`;
CREATE FUNCTION `GET_JP` ( PARAM VARCHAR ( 255 ) ) RETURNS VARCHAR ( 4 ) CHARSET UTF8 
BEGIN -- 姓名一般不超过四个中文字符,这里定义四个字段对应每一个中文字符
	DECLARE	V_FIRST VARCHAR(256);
	DECLARE	V_FIRST_CHAR VARCHAR(256);
	DECLARE	V_SECOND VARCHAR (256);
	DECLARE	V_SECOND_CHAR VARCHAR(256);
	DECLARE	V_THIRD VARCHAR(256);
	DECLARE	V_THIRD_CHAR VARCHAR(256);
	DECLARE	V_FOUTH VARCHAR(256);
	DECLARE	V_FOUTH_CHAR VARCHAR(256);
	DECLARE	V_CONCAT VARCHAR(256);
		SET V_FIRST_CHAR = UPPER(SUBSTR(PARAM,1,1));
		SET V_FIRST = V_FIRST_CHAR;
		SET V_SECOND_CHAR = UPPER(SUBSTR(PARAM,2,1));
		SET V_SECOND = V_SECOND_CHAR;
		SET V_THIRD_CHAR = UPPER(SUBSTR(PARAM,3,1));
		SET V_THIRD = V_THIRD_CHAR;
		SET V_FOUTH_CHAR = UPPER(SUBSTR(PARAM,4,1));
		SET V_FOUTH = V_FOUTH_CHAR;
		IF	LENGTH(PARAM) <> CHARACTER_LENGTH(PARAM) THEN
			IF	CHARACTER_LENGTH(PARAM) > 0 THEN
			SET V_FIRST = ELT(INTERVAL(CONV(HEX(LEFT(CONVERT (V_FIRST 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;
			IF	CHARACTER_LENGTH(PARAM) > 1 THEN
			SET V_SECOND = ELT(INTERVAL(CONV(HEX(LEFT (CONVERT (V_SECOND 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;
			IF	CHARACTER_LENGTH(PARAM) > 2 THEN
			SET V_THIRD = ELT(INTERVAL(CONV(HEX(LEFT(CONVERT (V_THIRD 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;
			IF	CHARACTER_LENGTH(PARAM) > 3 THEN
			SET V_FOUTH = ELT(INTERVAL(CONV(HEX(LEFT( CONVERT (V_FOUTH 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;
		END IF;
		SET V_CONCAT = concat(V_FIRST,V_SECOND,V_THIRD,V_FOUTH);
	RETURN V_CONCAT;
END

2.sql查询

select GET_JP(columns)  from tablename;

例如:

select GET_JP(last_name)  as '简拼',last_name as '姓名' from users;

3.查询结果

查询结果

代码更新

使用while循环遍历姓名字数

DROP FUNCTION IF	EXISTS `GET_JP`;
CREATE FUNCTION `GET_JP` ( PARAM VARCHAR ( 255 ) ) RETURNS VARCHAR ( 44 ) CHARSET UTF8 
BEGIN -- 姓名一般不超过四个中文字符,这里定义四个字段对应每一个中文字符
	DECLARE	V_FIRST VARCHAR(256);
	DECLARE	V_CHAR_LENGTH	VARCHAR(256);
	DECLARE	V_CONCAT	VARCHAR(256) default '';
	DECLARE i int default 1;
		SET V_CHAR_LENGTH = CHARACTER_LENGTH(PARAM);
		WHILE i <= V_CHAR_LENGTH
			DO
			SET V_FIRST = UPPER(SUBSTR(PARAM,i,1));
			SET V_FIRST = ELT(INTERVAL(CONV(HEX(LEFT(CONVERT (V_FIRST 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');
				SET V_CONCAT = concat(V_CONCAT,V_FIRST);
				set i = i + 1 ;
				END WHILE;
	RETURN V_CONCAT;
END;

注:此方法在处理部分字段时,不能匹配正确的简拼,需要在转化后进行人工复审后手动修改!
例如:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值