MSSQL 获取汉字的首拼音 MYSQL 获取汉字的首拼音

-- -- MSSQL -- -- -- MSSQL -- -- -- MSSQL -- -- -- MSSQL -- -- -- MSSQL -- -- 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*获取汉字的首拼音*/
create    function [dbo].[fun_getPY] 
 ( 
    @str nvarchar(4000) 
 ) 
returns nvarchar(4000) 
as 
begin 
  declare @word nchar(1),@PY nvarchar(4000) 

  set @PY='' 

  while len(@str)>0 
  begin 
    set @word=left(@str,1) 

    --如果非汉字字符,返回原字符 
    set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901 
               then (  
                            select top 1 PY  
                            from  
                            (  
                             select 'A' as PY,N'驁' as word 
                             union all select 'B',N'簿' 
                             union all select 'C',N'錯' 
                     union all select 'D',N'鵽' 
                     union all select 'E',N'樲' 
                     union all select 'F',N'鰒' 
                     union all select 'G',N'腂' 
                     union all select 'H',N'夻' 
                     union all select 'J',N'攈' 
                     union all select 'K',N'穒' 
                     union all select 'L',N'鱳' 
                     union all select 'M',N'旀' 
                     union all select 'N',N'桛' 
                     union all select 'O',N'漚' 
                     union all select 'P',N'曝' 
                     union all select 'Q',N'囕' 
                     union all select 'R',N'鶸' 
                     union all select 'S',N'蜶' 
                     union all select 'T',N'籜' 
                     union all select 'W',N'鶩' 
                     union all select 'X',N'鑂' 
                     union all select 'Y',N'韻' 
                     union all select 'Z',N'咗' 
                      ) T  

where word>=@word collate Chinese_PRC_CS_AS_KS_WS  
                   order by PY ASC 
                          )  
                      else @word  
                 end) 
    set @str=right(@str,len(@str)-1) 
  end 

  return upper(@PY)

end
GO
-- -- MSSQL -- -- -- MSSQL -- -- -- MSSQL -- -- -- MSSQL -- -- -- MSSQL -- -- 





-- -- MYSQL -- -- -- MYSQL -- -- -- MYSQL -- -- -- MYSQL -- -- -- MYSQL -- -- 
-- 1 
DELIMITER $$

USE `dsp_ad_center`$$

DROP FUNCTION IF EXISTS `fristPinyin`$$

CREATE DEFINER=`root`@`%` FUNCTION `fristPinyin`(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$$

DELIMITER ;

-- 2.
DELIMITER $$

USE `dsp_ad_center`$$

DROP FUNCTION IF EXISTS `pinyin`$$

CREATE DEFINER=`root`@`%` 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$$

DELIMITER ;
-- -- MYSQL -- -- -- MYSQL -- -- -- MYSQL -- -- -- MYSQL -- -- -- MYSQL -- -- 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DELIMITER $$ # 数据库名 USE `database`$$ # 方法名 DROP FUNCTION IF EXISTS `getPY`$$ # 用户 CREATE DEFINER=`root`@`%` FUNCTION `getPY`(in_string VARCHAR(21845)) RETURNS VARCHAR(21845) CHARSET utf8 BEGIN #截取字符串,每次做截取后的字符串存放在该变量中,初始为函数参数in_string值 DECLARE tmp_str VARCHAR(21845) CHARSET gbk DEFAULT '' ; #tmp_str的长度 DECLARE tmp_len SMALLINT DEFAULT 0; #tmp_str的长度 DECLARE tmp_loc SMALLINT DEFAULT 0; #截取字符,每次 left(tmp_str,1) 返回值存放在该变量中 DECLARE tmp_char VARCHAR(2) CHARSET gbk DEFAULT ''; #结果字符串 DECLARE tmp_rs VARCHAR(21845)CHARSET gbk DEFAULT ''; #拼音字符,存放单个汉字对应的拼音首字符 DECLARE tmp_cc VARCHAR(2) CHARSET gbk DEFAULT ''; #初始化,将in_string赋给tmp_str SET tmp_str = in_string; #初始化长度 SET tmp_len = LENGTH(tmp_str); #如果被计算的tmp_str长度大于0则进入该while WHILE tmp_len > 0 DO #获取tmp_str最左端的首个字符,注意这里是获取首个字符,该字符可能是汉字,也可能不是。 SET tmp_char = LEFT(tmp_str,1); #左端首个字符赋值给拼音字符 SET tmp_cc = tmp_char; #获取字符的编码范围的位置,为了确认汉字拼音首字母是那一个 SET tmp_loc=INTERVAL(CONV(HEX(tmp_char),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); #判断左端首个字符是多字节还是单字节字符,要是多字节则认为是汉字且作以下拼音获取,要是单字节则不处理。如果是多字节字符但是不在对应的编码范围之内,即对应的不是大写字母则也不做处理,这样数字或者特殊字符就保持原样了 IF (LENGTH(tmp_char)>1 AND tmp_loc>0 AND tmp_loc<24) THEN #获得汉字拼音首字符 SELECT ELT(tmp_loc,'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z') INTO tmp_cc; END IF; #将当前tmp_str左端首个字符拼音首字符与返回字符串拼接 SET tmp_rs = CONCAT(tmp_rs,tmp_cc); #将tmp_str左端首字符去除 SET tmp_str = SUBSTRING(tmp_str,2); #计算当前字符串长度 SET tmp_len = LENGTH(tmp_str); END WHILE; #返回结果字符串 RETURN tmp_rs; END$$ DELIMITER ;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值