|
 
- 帖子
- 245
- 精华
- 0
- 积分
- 574
- 威望
- 574 路币
- 金钱
- 0
- 阅读权限
- 150
- 注册时间
- 2009-9-6
|
1#
发表于 2009-10-2 00:01
| 只看该作者
建立表 - DROP TABLE IF EXISTS `ucenter_sync`.`a_pinying_key`;
- CREATE TABLE `ucenter_sync`.`a_pinying_key` (
- `PY` char(1) CHARACTER SET utf8 NOT NULL,
- `HZ` char(1) NOT NULL DEFAULT '',
- PRIMARY KEY (`PY`)
- ) ENGINE=InnoDB DEFAULT CHARSET=gbk;
复制代码
插入数据 - insert into a_pinying_key
- values
- ('A','骜'),
- ('B','簿'),
- ('C','错'),
- ('D','鵽'),
- ('E','樲'),
- ('F','鳆'),
- ('G','腂'),
- ('H','夻'),
- ('J','攈'),
- ('K','穒'),
- ('L','鱳'),
- ('M','旀'),
- ('N','桛'),
- ('O','沤'),
- ('P','曝'),
- ('Q','囕'),
- ('R','鶸'),
- ('S','蜶'),
- ('T','箨'),
- ('W','鹜'),
- ('X','鑂'),
- ('Y','韵'),
- ('Z','咗');
复制代码
写函数 - DELIMITER $$
- DROP FUNCTION IF EXISTS `ucenter_sync`.`f_pyfirst` $$
- CREATE DEFINER=`root`@`%` FUNCTION `f_pyfirst`(str CHAR(255)) RETURNS char(255) CHARSET utf8
- BEGIN
- DECLARE hexCode char(4);
- DECLARE pinyin varchar(255);
- DECLARE firstChar char(1);
- DECLARE aChar char(1);
- DECLARE pos int;
- DECLARE strLength int;
- SET pinyin = '';
- SET strLength = CHAR_LENGTH(LTRIM(RTRIM(str)));
- SET pos = 1;
- SET @str = (CONVERT(str USING gbk));
- WHILE pos <= strLength DO
- SET @aChar = SUBSTRING(@str,pos,1);
- SET hexCode = HEX(@aChar);
- IF hexCode >= "8140" AND hexCode <= "FEA0" THEN
- SELECT PY into firstChar
- FROM a_pinying_key
- WHERE HZ >= @aChar
- LIMIT 1;
- END IF;
- SET pinyin = CONCAT(pinyin,firstChar);
- SET pos = pos + 1;
- END WHILE;
- RETURN UPPER(pinyin);
- END $$
- DELIMITER ;
复制代码
测试:
select f_pyfirst('南海龙王');
结果:
NHLW |
|