mysql二元分词法函数

DELIMITER $$;

DROP   FUNCTION   IF   EXISTS  `radius`.`fun_split`$$

CREATE  DEFINER = `root`@` % FUNCTION  `fun_split`(nm  varchar ( 100 ))  RETURNS   varchar ( 500 ) CHARSET latin1
    READS SQL DATA
BEGIN
      
declare  i  int ;
      
declare  rtn  int ;
      
declare  rtn1  int ;
      
declare  sec  varchar ( 10 );
      
declare  rtnstr  varchar ( 500 );
          
set  i = 1 ;
      
set  rtnstr = '' ;
          
WHILE  i  < length(nm) DO
      
set  rtn =   ascii ( substring (nm,i, 1 ));
      
IF  rtn > 127   THEN  
         
set  rtn1 =   ascii ( right ( substring (nm,i, 2 ), 1 ));
         
IF  rtn1 >   127   THEN
            
IF  i < length(nm) - 1   THEN
          
IF  ( ascii ( right ( substring (nm,i, 3 ), 1 )) > 127   and   ascii ( right ( substring (nm,i, 4 ), 1 )) > 127 THEN
             
set  sec = concat( right (concat( ' 00 ' ,rtn - 160 ), 2 ), right (concat( ' 00 ' ,rtn1 - 160 ), 2 ), right (concat( ' 00 ' , ascii ( right ( substring (nm,i, 3 ), 1 )) - 160 ), 2 ), right (concat( ' 00 ' , ascii ( right ( substring (nm,i, 4 ), 1 )) - 160 ), 2 ), '   ' );
          
ELSE
             
set  sec = '' ;
          
END   IF ;
            
ELSE
          
set  sec = '' ;
            
END   IF  ;
         
ELSE
            
set  sec = concat( char (rtn), char (rtn1));
         
END   IF ;
         
SET  i  =  i  +   1 ;
      
ELSE  
         
IF  i < length(nm) - 1   THEN
          
IF  ( ascii ( right ( substring (nm,i, 2 ), 1 )) > 127   and   ascii ( right ( substring (nm,i, 3 ), 1 )) > 127 THEN
              
set  sec = concat( char (rtn), '   ' );
          
ELSE
              
set  sec = char (rtn);
          
END   IF ;
         
ELSE
          
IF  ( ascii ( right ( substring (nm,i, 2 ), 1 )) > 127   and   ascii ( right ( substring (nm,i, 3 ), 1 )) > 127 THEN
              
set  sec = char (rtn);
          
ELSE
              
set  sec = char (rtn, ascii ( right ( substring (nm,i, 2 ), 1 )));
          
END   IF ;
         
END   IF ;
         
      
END   IF ;
      
set  rtnstr = concat(rtnstr,sec);
      
SET  i  =  i  +   1 ;
      
      
END   WHILE ;
       
RETURN  rtnstr;
      
END $$

DELIMITER ;$$
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值