日期:2014-05-16 浏览次数:20806 次
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
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