mysql 汉字转拼音

1.判断字符串是否为汉字 返回值:1-汉字 0-非汉字 

*****************************************************/ 

DROP FUNCTION IF EXISTS fc_is_hanzi; 

CREATE FUNCTION fc_is_hanzi( 
p_str VARCHAR(1024) 

RETURNS int(11) 
NOT DETERMINISTIC 
SQL SECURITY DEFINER 
COMMENT '检查字符串是否为汉字' 
BEGIN 
/*检查字符串是否为汉字 返回值:1-汉字 0-非汉字*/ 

DECLARE _ret, i, other_cnt, l_acode INT DEFAULT 0; 
SET _ret = 0; 
SET i = 1; 
SET other_cnt = 0; 
SET l_acode = 0; 
WHILE i <= CHAR_LENGTH(p_str) DO 
SET l_acode = ASCII(SUBSTRING(p_str, i, 1)); 
IF l_acode<124 or l_acode>254 THEN 
SET other_cnt = other_cnt + 1; 
END IF; 
SET i = i + 1; 
END WHILE; 
IF other_cnt = 0 THEN 
SET _ret = 1; 
ELSE 
SET _ret = 0; 
END IF; 
RETURN _ret; 
END; 

/***************************************************** 
2.判断日期格式是否正确(返回值:1-正确 0-错误) 

*****************************************************/ 

DROP FUNCTION IF EXISTS fc_ck_date; 

CREATE FUNCTION fc_ck_date( 
p_cont CHAR(32) 

RETURNS tinyint(4) 
NOT DETERMINISTIC 
SQL SECURITY DEFINER 
COMMENT '判定日期格式是否正确' 
BEGIN 
/*判定日期格式是否正确(返回值:1-正确 0-错误)*/ 
/*输入值格式为:yyyyMMdd 或 yyyy-MM-dd*/ 

IF(SELECT DATE_FORMAT(p_cont,'%Y%m%d')) IS NULL THEN 
RETURN 0; 
ELSE 
RETURN 1; 
END IF; 

END; 

/***************************************************** 
3.判断字符串是否为纯数字(返回值:1-为纯数字 0-非纯数字) 

*****************************************************/ 

DROP FUNCTION IF EXISTS fc_is_num; 

CREATE FUNCTION fc_is_num( 
p_string VARCHAR(32) 

RETURNS int(4) 
NOT DETERMINISTIC 
SQL SECURITY DEFINER 
COMMENT '检查字符串是否为纯数字' 
BEGIN 
/*检查字符串是否为纯数字*/ 
/*返回值:1-为纯数字 0-非纯数字*/ 

DECLARE iResult INT DEFAULT 0; 
SELECT p_string REGEXP '^[0-9]*$' INTO iResult; 
IF iResult = 1 THEN 
RETURN 1; 
ELSE 
RETURN 0; 
END IF; 

END; 


获取第一个字符拼音
CREATE DEFINER=`db1`@`%` FUNCTION `chi_to_pinyin`(chinesename varchar(200) ) RETURNS varchar(10) CHARSET utf8
BEGIN


DECLARE l_acode INT DEFAULT 0; 

说明:

ELT(N,str1,str2,str3,…)
若N = 1,则返回值为 str1 ,若N = 2,则返回值为 str2 ,以此类推。

INTERVAL(N,N1,N2,N3,…)
N1,N2,N3,…为递增的有序整数。函数返回N在有序整数中的位置。

CONV(N,from_base,to_base)
不同数基间转换数字。返回值为数字的N字符串表示,由from_base基转化为 to_base 基。本例中为将十六进制转换为十进制。

CONVERT(FieldName USING gbk)

将数据转换为gbk字符集。

HEX(CHAR)
返回字符的十六进制数。

LEFT(STR,N)
取STR字符串左边开始的N个字符。



SET l_acode = 0; 


SET l_acode = ASCII(left(chinesename,1)); 
IF l_acode >=65 and l_acode <=90 or l_acode >=97 and l_acode <=122 THEN 
return left(chinesename,1);


return ELT(INTERVAL(CONV(HEX(left(CONVERT(chinesename 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');
 
END



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值