转【数据库-MySql】一键将表中的A字段转换成拼音码到B字段 (无需中间表)

MySQL 数据库汉字转换拼音码

#CONVERT(expr USING transcoding_name)提供一个在不同字符集之间转换数据的方法
#LEFT(str,len) 返回从字符串str 开始的len 最左字符。
#HEX(char)导出时采用HEX函数读取数据,把二进制的数据转为16进制的字符串;
#CONV(N,from_base,to_base) 将N从from_base进制转换成to_base进制
#INTERVAL(m,N1,N2,N3...Nn)   【N1~Nn】是个数组,如果 m<Nn 返回N(n-1)的在【N1~Nn】索引 ;
#ELT(m,N1,N2,N3...Nn)  【N1~Nn】是个数组,n为【N1~Nn】数组的索引,返回值为 Nm;
#LENGTH(str)  字符串长度
#SUBSTR(str,start,len) 裁剪字符串
#CONCAT(str1,str2,str3...strn) 连接字符串

#set global log_bin_trust_function_creators=true;
#set global log_bin_trust_function_creators=on; 
set global log_bin_trust_function_creators=1;

DROP FUNCTION IF EXISTS PYCOV; 

CREATE FUNCTION `PYCOV`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET gbk 
BEGIN
    DECLARE V_COMPARE VARCHAR(255);
    DECLARE V_RETURN VARCHAR(255);      
    DECLARE V_GBKSTR VARCHAR(255);      
    DECLARE V_CHAR VARCHAR(10);         
    DECLARE I_HEX VARCHAR(10);      
    DECLARE I_DECIMAL INT;      
    DECLARE I_INDEX INT;
    DECLARE V_COVCHAR VARCHAR(10);
    DECLARE I INT;

    SET I = 1;
    SET V_RETURN = '';      
    SET V_GBKSTR = '';      
    SET V_CHAR = '';        
    SET I_HEX ='';      
    SET I_DECIMAL = 1;      
    SET I_INDEX  = 1;
    SET V_COVCHAR = '';
    while I < LENGTH(P_NAME) do
        SET V_COMPARE = SUBSTR(P_NAME, I, 1);
        IF (V_COMPARE != '') THEN
            #将字符串转换成GBK编码格式
            SET V_GBKSTR = CONVERT(V_COMPARE USING gbk);
            #获取字符的第一个编码
            SET V_CHAR = LEFT(V_GBKSTR,1);
            #将字符转存编码
            SET I_HEX = HEX(V_CHAR);
            #16字符串进制转10进制
            SET I_DECIMAL = CONV(I_HEX,16,10);
            #GBK 编码组 - 获取【汉字拼音首字母组】索引
            SET I_INDEX = INTERVAL(I_DECIMAL,        
                0x0000,
                #ASCII 【0-9】,【:-@】,【A-Z】, 【[-`】 【a-z】,【{-/】
                0x0030,0x003A,0x0041,0x005B,0x0061,0x007B,
                #GBK   【0-9】,【:-@】,【A-Z】, 【[-`】 【a-z】,【{-盃】
                0xA3B0,0xA3BA,0xA3C1,0xA3DB,0xA3E1,0xA3FB,
                #GBK 汉字拼音首字母 a-h
                #【啊-澳】【芭-怖】【擦-错】【搭-堕】【蛾-贰】【发-咐】【噶-过】【哈-祸】
                0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,
                #GBK 汉字拼音首字母 j-q
                #【击-骏】【喀-阔】【垃-络】【妈-穆】【拿-诺】【哦-沤】【啪-瀑】【期-群】
                0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,
                #GBK 汉字拼音首字母 r-z
                #【然-弱】【撒-所】【塌-唾】【挖-误】【昔-迅】【压-孕】【匝-座】【□-□】
                0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1,0xD7FA);
            #汉字拼音首字母组
            SET V_COVCHAR = ELT(I_INDEX,
                '',
                V_CHAR,'',V_CHAR,'',V_CHAR,'',
                V_CHAR,'',V_CHAR,'',V_CHAR,'',
                '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_RETURN = CONCAT(V_RETURN, V_COVCHAR);
        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;

#根据实际情况修改表名和代码
#表:medicine
#源码-汉字字符串:med_name_ch
#拼音码:med_py_code 
UPDATE medicine_copy set med_py_code = PYCOV(med_name_ch);

#删除函数 
DROP FUNCTION IF EXISTS PYCOV;

#set global log_bin_trust_function_creators=false;
#set global log_bin_trust_function_creators=off; 
set global log_bin_trust_function_creators=0;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值