zoukankan      html  css  js  c++  java
  • mysql数据库汉字首字母简拼全拼

    汉字提取首字母

    转自 https://blog.csdn.net/u012998306/article/details/98867025 多谢老哥

    fristPinyin : 此函数是将一个中文字符串的第一个汉字转成拼音字母 (例如:"李"->l),包括特殊字符处理,可以进行动态添加

    CREATE FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
    BEGIN
        DECLARE V_RETURN VARCHAR(255);
    		DECLARE V_FIRST_CHAR VARCHAR(255);
    		set V_FIRST_CHAR =UPPER(LEFT(CONVERT(P_NAME USING gbk),1));
    		set V_RETURN = V_FIRST_CHAR;
    IF V_FIRST_CHAR in ('(',')','《','》')
    THEN SET V_RETURN = '';
    elseif LENGTH( V_FIRST_CHAR) <> CHARACTER_LENGTH( V_FIRST_CHAR )
    			then	
    				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');
    elseif V_FIRST_CHAR in ('A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z',
    												'1','2','3','4','5','6','7','8','9','0','*','+','-','=','/','\\','{','}','[',']')
    			then SET V_RETURN = V_RETURN;
    else 
    			SET V_RETURN = '#';
    END IF;
    		RETURN IFNULL(V_RETURN,'#');
    END
    

    姓名首字母全拼

    pinyin :此函数是将一个中文字符串对应拼音母的每个相连 (例如:"李佳航"->ljh(或者说"张伟"-zw))

    CREATE 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, ',', V_COMPARE);
                SET V_RETURN = CONCAT(V_RETURN, fristPinyin(V_COMPARE));
                #SET V_RETURN = fristPinyin(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
    

    姓名转拼音

    创建拼音对照表

    
    -- 创建汉字拼音对照临时表
    CREATE TABLE IF NOT EXISTS `t_base_pinyin` (
      `pin_yin_` varchar(255) CHARACTER SET gbk NOT NULL,
      `code_` int(11) NOT NULL,
      PRIMARY KEY (`code_`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    插入数据

    INSERT INTO t_base_pinyin (pin_yin_,code_)  VALUES ("a", 20319),("ai", 20317),("an", 20304),("ang", 20295),("ao", 20292),("ba", 20283),("bai", 20265),("ban", 20257),("bang", 20242),("bao", 20230),("bei", 20051),("ben", 20036),("beng", 20032),("bi", 20026),("bian", 20002),("biao", 19990),("bie", 19986),("bin", 19982),("bing", 19976),("bo", 19805),("bu", 19784),("ca", 19775),("cai", 19774),("can", 19763),("cang", 19756),("cao", 19751),("ce", 19746),("ceng", 19741),("cha", 19739),("chai", 19728),("chan", 19725),("chang", 19715),("chao", 19540),("che", 19531),("chen", 19525),("cheng", 19515),("chi", 19500),("chong", 19484),("chou", 19479),("chu", 19467),("chuai", 19289),("chuan", 19288),("chuang", 19281),("chui", 19275),("chun", 19270),("chuo", 19263),("ci", 19261),("cong", 19249),("cou", 19243),("cu", 19242),("cuan", 19238),("cui", 19235),("cun", 19227),("cuo", 19224),("da", 19218),("dai", 19212),("dan", 19038),("dang", 19023),("dao", 19018),("de", 19006),("deng", 19003),("di", 18996),("dian", 18977),("diao", 18961),("die", 18952),("ding", 18783),("diu", 18774),("dong", 18773),("dou", 18763),("du", 18756),("duan", 18741),("dui", 18735),("dun", 18731),("duo", 18722),("e", 18710),("en", 18697),("er", 18696),("fa", 18526),("fan", 18518),("fang", 18501),("fei", 18490),("fen", 18478),("feng", 18463),("fo", 18448),("fou", 18447),("fu", 18446),("ga", 18239),("gai", 18237),("gan", 18231),("gang", 18220),("gao", 18211),("ge", 18201),("gei", 18184),("gen", 18183),("geng", 18181),("gong", 18012),("gou", 17997),("gu", 17988),("gua", 17970),("guai", 17964),("guan", 17961),("guang", 17950),("gui", 17947),("gun", 17931),("guo", 17928),("ha", 17922),("hai", 17759),("han", 17752),("hang", 17733),("hao", 17730),("he", 17721),("hei", 17703),("hen", 17701),("heng", 17697),("hong", 17692),("hou", 17683),("hu", 17676),("hua", 17496),("huai", 17487),("huan", 17482),("huang", 17468),("hui", 17454),("hun", 17433),("huo", 17427),("ji", 17417),("jia", 17202),("jian", 17185),("jiang", 16983),("jiao", 16970),("jie", 16942),("jin", 16915),("jing", 16733),("jiong", 16708),("jiu", 16706),("ju", 16689),("juan", 16664),("jue", 16657),("jun", 16647),("ka", 16474),("kai", 16470),("kan", 16465),("kang", 16459),("kao", 16452),("ke", 16448),("ken", 16433),("keng", 16429),("kong", 16427),("kou", 16423),("ku", 16419),("kua", 16412),("kuai", 16407),("kuan", 16403),("kuang", 16401),("kui", 16393),("kun", 16220),("kuo", 16216),("la", 16212),("lai", 16205),("lan", 16202),("lang", 16187),("lao", 16180),("le", 16171),("lei", 16169),("leng", 16158),("li", 16155),("lia", 15959),("lian", 15958),("liang", 15944),("liao", 15933),("lie", 15920),("lin", 15915),("ling", 15903),("liu", 15889),("long", 15878),("lou", 15707),("lu", 15701),("lv", 15681),("luan", 15667),("lue", 15661),("lun", 15659),("luo", 15652),("ma", 15640),("mai", 15631),("man", 15625),("mang", 15454),("mao", 15448),("me", 15436),("mei", 15435),("men", 15419),("meng", 15416),("mi", 15408),("mian", 15394),("miao", 15385),("mie", 15377),("min", 15375),("ming", 15369),("miu", 15363),("mo", 15362),("mou", 15183),("mu", 15180),("na", 15165),("nai", 15158),("nan", 15153),("nang", 15150),("nao", 15149),("ne", 15144),("nei", 15143),("nen", 15141),("neng", 15140),("ni", 15139),("nian", 15128),("niang", 15121),("niao", 15119),("nie", 15117),("nin", 15110),("ning", 15109),("niu", 14941),("nong", 14937),("nu", 14933),("nv", 14930),("nuan", 14929),("nue", 14928),("nuo", 14926),("o", 14922),("ou", 14921),("pa", 14914),("pai", 14908),("pan", 14902),("pang", 14894),("pao", 14889),("pei", 14882),("pen", 14873),("peng", 14871),("pi", 14857),("pian", 14678),("piao", 14674),("pie", 14670),("pin", 14668),("ping", 14663),("po", 14654),("pu", 14645),("qi", 14630),("qia", 14594),("qian", 14429),("qiang", 14407),("qiao", 14399),("qie", 14384),("qin", 14379),("qing", 14368),("qiong", 14355),("qiu", 14353),("qu", 14345),("quan", 14170),("que", 14159),("qun", 14151),("ran", 14149),("rang", 14145),("rao", 14140),("re", 14137),("ren", 14135),("reng", 14125),("ri", 14123),("rong", 14122),("rou", 14112),("ru", 14109),("ruan", 14099),("rui", 14097),("run", 14094),("ruo", 14092),("sa", 14090),("sai", 14087),("san", 14083),("sang", 13917),("sao", 13914),("se", 13910),("sen", 13907),("seng", 13906),("sha", 13905),("shai", 13896),("shan", 13894),("shang", 13878),("shao", 13870),("she", 13859),("shen", 13847),("sheng", 13831),("shi", 13658),("shou", 13611),("shu", 13601),("shua", 13406),("shuai", 13404),("shuan", 13400),("shuang", 13398),("shui", 13395),("shun", 13391),("shuo", 13387),("si", 13383),("song", 13367),("sou", 13359),("su", 13356),("suan", 13343),("sui", 13340),("sun", 13329),("suo", 13326),("ta", 13318),("tai", 13147),("tan", 13138),("tang", 13120),("tao", 13107),("te", 13096),("teng", 13095),("ti", 13091),("tian", 13076),("tiao", 13068),("tie", 13063),("ting", 13060),("tong", 12888),("tou", 12875),("tu", 12871),("tuan", 12860) ,("tui", 12858),("tun", 12852),("tuo", 12849),("wa", 12838),("wai", 12831),("wan", 12829),("wang", 12812),("wei", 12802),("wen", 12607),("weng", 12597),("wo", 12594),("wu", 12585),("xi", 12556),("xia", 12359),("xian", 12346),("xiang", 12320),("xiao", 12300),("xie", 12120),("xin", 12099),("xing", 12089),("xiong", 12074),("xiu", 12067),("xu", 12058),("xuan", 12039),("xue", 11867),("xun", 11861),("ya", 11847),("yan", 11831),("yang", 11798),("yao", 11781),("ye", 11604),("yi", 11589),("yin", 11536),("ying", 11358),("yo", 11340),("yong", 11339),("you", 11324),("yu", 11303),("yuan", 11097),("yue", 11077),("yun", 11067),("za", 11055),("zai", 11052),("zan", 11045),("zang", 11041),("zao", 11038),("ze", 11024),("zei", 11020),("zen", 11019),("zeng", 11018),("zha", 11014),("zhai", 10838),("zhan", 10832),("zhang", 10815),("zhao", 10800),("zhe", 10790),("zhen", 10780),("zheng", 10764),("zhi", 10587),("zhong", 10544),("zhou", 10533),("zhu", 10519),("zhua", 10331),("zhuai", 10329),("zhuan", 10328),("zhuang", 10322),("zhui", 10315),("zhun", 10309),("zhuo", 10307),("zi", 10296),("zong", 10281),("zou", 10274),("zu", 10270),("zuan", 10262),("zui", 10260),("zun", 10256),("zuo", 10254);
    

    汉字转换拼音函数

    -- 建立汉字转换拼音函数
    DROP FUNCTION IF EXISTS to_pinyin;
    DELIMITER $
    CREATE FUNCTION to_pinyin(NAME VARCHAR(255) CHARSET gbk)
    RETURNS VARCHAR(255) CHARSET gbk
    BEGIN
        DECLARE mycode INT;
        DECLARE tmp_lcode VARCHAR(2) CHARSET gbk;
        DECLARE lcode INT;
        DECLARE tmp_rcode VARCHAR(2) CHARSET gbk;
        DECLARE rcode INT;
     
        DECLARE mypy VARCHAR(255) CHARSET gbk DEFAULT '';
        DECLARE lp INT;
     
        SET mycode = 0;
        SET lp = 1;
     
        SET NAME = HEX(NAME);
     
        WHILE lp < LENGTH(NAME) DO
     
            SET tmp_lcode = SUBSTRING(NAME, lp, 2);
            SET lcode = CAST(ASCII(UNHEX(tmp_lcode)) AS UNSIGNED); 
            SET tmp_rcode = SUBSTRING(NAME, lp + 2, 2);
            SET rcode = CAST(ASCII(UNHEX(tmp_rcode)) AS UNSIGNED); 
            IF lcode > 128 THEN
                SET mycode =65536 - lcode * 256 - rcode ;
                SELECT CONCAT(mypy,pin_yin_) INTO mypy FROM t_base_pinyin WHERE CODE_ >= ABS(mycode) ORDER BY CODE_ ASC LIMIT 1;
                SET lp = lp + 4;
            ELSE
                SET mypy = CONCAT(mypy,CHAR(CAST(ASCII(UNHEX(SUBSTRING(NAME, lp, 2))) AS UNSIGNED)));
                SET lp = lp + 2;
            END IF;
        END WHILE;
        RETURN LOWER(mypy);
    END;
    $
    DELIMITER ;
    

    测试函数

    SELECT fristPinyin("李佳航"),fristPinyin("曹操"),pinyin("李佳航"),pinyin("曹操"),to_pinyin("李佳航"),to_pinyin("曹操");
    

    存储过程,调用这个函数,具体怎么操作数据

    create PROCEDURE getPinyin()
    BEGIN
    	set @count = null;
    	SELECT COUNT(*) id INTO @count from t_hospital;
    	WHILE @count>0 do
    	-- 查询 --
    	set @tmp = null;
    	set @tmp1 = null;
    
    	SELECT name INTO @tmp from t_hospital as t where t.id = @count ;
    	SELECT pinyin(@tmp) INTO @tmp1 from t_hospital where id = @count ;
    	
    	update t_hospital set inputCode=@tmp1 WHERE id=@count;
    
    	set @count = @count-1;
    	END WHILE ;
    END
    
  • 相关阅读:
    APP 打包成功的四种方法 转自
    设置启动页
    大数据之医疗行业数据分析
    实验三(FCFS ,SJF,HRRN)
    实验四 用信号量解决进程互斥与同步问题
    实验二 (3)最短作业优先调度
    实验二 (2)优先数调度
    实验二 (1)先来先服务进程调度
    实验一
    Hdoj 1253
  • 原文地址:https://www.cnblogs.com/iullor/p/12112571.html
Copyright © 2011-2022 走看看