暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过自定义函数实现在Mysql中汉字转为拼音首字母缩写

云自由 2022-12-29
1335

Mysql可以使用 CREATE FUNCTION 语句创建自定义函数。下面通过两个自定义函数,实现汉字转拼音首字母:

一、创建自定义函数firstpinyin,将一个中文字符串的第一个汉字转成拼音字母

CREATE DEFINER=`root`@`localhost` FUNCTION `firstpinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
   DECLARE V_RETURN VARCHAR(255);
   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');
   RETURN V_RETURN;
END


二、创建自定义函数pinyin,将一个中文字符串对应的拼音字母连接

CREATE DEFINER=`root`@`localhost` FUNCTION `pinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
   DECLARE V_COMPARE VARCHAR(255);
   DECLARE V_RETURN VARCHAR(255);
   DECLARE I INT;

   SET I = 1;
   SET V_RETURN = '';
   while I < LENGTH(P_NAME) do
       SET V_COMPARE = SUBSTR(P_NAME, I, 1);
       IF (V_COMPARE != '') THEN          
           SET V_RETURN = CONCAT(V_RETURN, firstpinyin(V_COMPARE));            
       END IF;
       SET I = I + 1;
   end while;

   IF (ISNULL(V_RETURN) or V_RETURN = '') THEN
       SET V_RETURN = P_NAME;
   END IF;

   RETURN V_RETURN;
END


三、应用自定义函数

SELECT xm,pinyin(xm) FROM `dianhua`

注意:经测试,部分汉字转换有错误,如:倩→Z,婷→Z

文章转载自云自由,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论