Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4159957
  • 博文数量: 240
  • 博客积分: 11504
  • 博客等级: 上将
  • 技术积分: 4277
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-28 14:24
文章分类

全部博文(240)

分类: Mysql/postgreSQL

2007-12-10 10:20:01

今天碰到了取拼音首字母的需求。整理了一下。
1、编码表:

/*DDL Information For - test.cs_char2letter*/
------------------------------------------------------

Table           Create Table                                
--------------  ---------------------------------------------
cs_char2letter  CREATE TABLE `cs_char2letter` (             
                  `PY` char(1) character set utf8 NOT NULL, 
                  `HZ` char(1) NOT NULL default '',         
                  PRIMARY KEY  (`PY`)                       
                ) ENGINE=InnoDB DEFAULT CHARSET=gbk   
 

2、记录信息:

query result(23 records)

PY HZ
A
B 簿
C
D
E
F
G
H
J
K
L
M
N
O
P
Q
R
S
T
W
X
Y
Z

3、取拼音首字母的函数:
DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`func_get_first_letter`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `func_get_first_letter`(
 words   varchar(255)) RETURNS  char(1) CHARSET utf8
BEGIN  
  declare fpy char(1);  
  declare pc char(1);  
  declare cc char(4);  
  set @fpy = UPPER(left(words,1));  
  set @pc = (CONVERT(@fpy   USING   gbk));  
  set @cc = hex(@pc);  
  if @cc >= "8140" and @cc <="FEA0" then 
    begin  
      select PY from cs_char2letter where hz>=@pc limit 1 into @fpy;
    end;  
  end   if;  
  Return   @fpy;  
  END$$

DELIMITER ;

4、测试结果:


select func_get_first_letter('我是月亮'),func_get_first_letter('月亮是我'),func_get_first_letter('他爸也是我');


query result(1 records)

func_get_first_letter('我是月亮') func_get_first_letter('月亮是我') func_get_first_letter('他爸也是我')
W Y T
5、附上表插表语句:
truncate table cs_char2letter;
set names utf8;
insert into cs_char2letter values
('A','骜'),
('B','簿'),
('C','错'),
('D','鵽'),
('E','樲'),
('F','鳆'),
('G','腂'),
('H','夻'),
('J','攈'),
('K','穒'),
('L','鱳'),
('M','旀'),
('N','桛'),
('O','沤'),
('P','曝'),
('Q','囕'),
('R','鶸'),
('S','蜶'),
('T','箨'),
('W','鹜'),
('X','鑂'),
('Y','韵'),
('Z','咗');
阅读(7798) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

feiazifeiazi2015-02-10 14:01:59

chinaunix网友:有没有可以用在uft8的咯。。 我的这边用的全部都返回为A

你创建表是 DEFAULT CHARSET=gbk ?
写了后,就不是A了。

回复 | 举报

chinaunix网友2009-04-15 10:32:45

有没有可以用在uft8的咯。。 我的这边用的全部都返回为A

redlizard2008-08-04 11:30:08

不错,可惜得自己做字典