• MySQL获取汉字的拼音首字母


    一、函数

    这里是通过函数调用进行获取汉字的拼音首字母。

    DELIMITER $$
    CREATE FUNCTION `pinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
    DETERMINISTIC
    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, to_frist_pinyin(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 FUNCTION `to_frist_pinyin`(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 = '';
    #两个不相等只有一个情况,V_FIRST_CHAR是中文汉字或者中文符号。
    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$$
    DELIMITER ;
    

      

  • 相关阅读:
    请求分页中的内存分配
    Android开发实例总结
    出现java.lang.IllegalArgumentException异常
    请求分页中的内存分配之续
    HTTPCLIENT使用学习
    传输控制层协议TCP概述抄书
    freemarker中空值 null的处理 ?exists ?if_exists ?default(“”)
    Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring 大新博客 推酷 360安全浏览器 7.1
    jade 学习笔记 gulp 自动编译
    @resource和@autowired的区别是什么CSDN论坛CSDN.NET中国最大的IT技术社区 Google Chrome
  • 原文地址:https://www.cnblogs.com/ios9/p/16600472.html
Copyright © 2020-2023  润新知