实用小技巧,mysql中文字段转拼音(首字母/全拼)

在项目中需要用到拼音首字母查询,新增了一个字段,把原中文字段的首字母存储到另一个字段

update 表名 set  拼音字段 = fun_pinyin(原字段,true/false)

调用该存储函数,会遇到两个问题

1. 多音字不能区分

2.字符集编码报错,字段字符集类型需要为utf8mb64

CREATE DEFINER=`dev`@`%` FUNCTION `fun_pinyin`(name varchar(500), is_short bit) RETURNS varchar(1000) CHARSET utf8mb4
    COMMENT '中文直接转全拼或简拼,不支持多音字'
BEGIN
    /*
    参数说明:
        name:需要转换的字符串
        is_short:是否转换为简拼,0全拼/1简拼
    */

    DECLARE restr VARCHAR(1000) DEFAULT '';
    DECLARE codestr VARCHAR(50) DEFAULT '';

    WHILE length(name) > 0 DO
        /*从字符串中取出一个字符*/
        set codestr = left(name, 1);
        set name = SUBSTRING(name, 2);

        if not codestr REGEXP "[u0391-uFFE5]" then -- 是中文
            -- 得到这个字符的拼音
            SELECT a.CODE into codestr FROM sys_convert_fullpinyin a WHERE a.NAME=codestr limit 1;
        end if;

        -- 如果是多音字,取第一个拼音
		if LOCATE(',',codestr)  > 0 then
			set codestr = substring(codestr,1,LOCATE(',',codestr) - 1);
		end if;

        if is_short = 1 then
            set restr = concat(restr, left(codestr, 1));
        else
            set restr = concat(restr, codestr);
        end if;

    END WHILE;

    return restr;
END

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值