日期:2014-05-16  浏览次数:20806 次

MySQL自定义中文转拼音函数
今日在网上下载了份省市区对应的数据库,由于要做拼音查询,发现该库里没有拼音字段。于是在网上找到了一遍文章,只能做中文字符串第一个字转拼音。下面只能靠自己了,于是我在此功能的基础上做了很简单的扩展。

参考文章地址:http://www.oicto.com/mysql-zhongwen-pingyin/

下面说说我的扩展吧,我自定义了两个函数分别功能如下:

fristPinyin : 此函数是将一个中文字符串的第一个汉字转成拼音字母
(例如:"中国人"->Z)

CREATE 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



pinyin :此函数是将一个中文字符串对应拼音母的每个相连
(例如:"中国人"->ZGR)

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


下面是测试结果:
mysql> select p.province, fristPinyin(p.province), pinyin(p.province) from province p;
+------------------+-------------------------+--------------------+
| province         | fristPinyin(p.province) | pinyin(p.province) |
+------------------+-------------------------+--------------------+
| 北京市           | B                       | BJS                |
| 天津市           | T                       | TJS                |
| 河北省           | H                       | HBS                |
| 山西省           | S                       | SXS                |
| 内蒙古自治区     | N                       | NMGZZQ             |
| 辽宁省           | L                       | LNS                |
| 吉林省           | J                       | JLS                |
| 黑龙江省         | H                       | HLJS               |
| 上海市           | S                       | SHS                |
| 江苏省           | J                       | JSS                |
| 浙江省           | Z                       | ZJS                |
| 安徽省           | A                       | AHS                |
| 福建省           | F                       | FJS                |
| 江西省           | J                       | JXS                |
| 山东省           | S                       | SDS                |
| 河南省           | H                       | HNS                |
| 湖北省           | H                       | HBS                |
| 湖南省           | H                       | HNS                |
| 广东省           | G                       | GDS                |
| 广西壮族自治区   | G                       | GXZZZZQ            |
| 海南省           | H                       | HNS                |
| 重庆市           | Z                       | ZQS                |
| 四川省           | S                       | SCS                |
| 贵州省           | G                       | GZS                |
| 云南省           | Y                       | YNS                |
| 西藏自治区       | X                       | XCZZQ              |
| 陕西省           | S                       | SXS                |
| 甘肃省           | G                       | GSS                |
| 青海省           | Q                       | QHS                |
| 宁夏回族自治区   | N                       | NXHZZZQ            |
| 新疆维吾尔自治区 | X                       | XJWWEZZQ           |
| 台湾省           | T                       | TWS