一、MySQL创建函数
1、语法
CREATE FUNCTION fun_name([paramName type , paramName type]) RETURNS type
BEGIN
-- do something
RETURN type;
END
2、创建函数
CREATE FUNCTION fun_one(arg1 int , arg2 VARCHAR(100)) RETURNS VARCHAR(100)
BEGIN
-- do something
RETURN NOW();
END
3、调用函数
SELECT fun_one(1,'a');
4、删除函数
DROP FUNCTION IF EXISTS fun_one ;
5、查看函数
SHOW FUNCTION STATUS [WHERE db = 'xxxx''];
二、MySQL汉字转拼音
1、需要一个拼音--汉字 对应的字库。 pinyin_data 表,内如如下:
2、创建 chinese_to_pinyin()函数,实现汉字转换为拼音,代码如下:
DROP FUNCTION IF EXISTS chinese_to_pinyin ;
CREATE FUNCTION chinese_to_pinyin(str varchar(100) charset gbk) RETURNS VARCHAR(200)
BEGIN
DECLARE result varchar(200) charset gbk DEFAULT '' ;-- 最终结果
DECLARE length int DEFAULT 0 ; -- 字符串的长度
DECLARE default_index int DEFAULT 1 ; -- 默认截取字符串的位置
DECLARE judge_index int DEFAULT 0 ; -- 判断非汉字字符位置,空格,逗号等
DECLARE str_char VARCHAR(4) DEFAULT '' ; -- 截取的单个字符
DECLARE pinyin_str VARCHAR(30) DEFAULT null ; -- 转换后的拼音字符串
SET length = CHAR_LENGTH(str); -- 计算传入字符串长度
-- 执行 while 循环进行判断
WHILE default_index <= length DO
SET str_char = SUBSTRING(str ,default_index ,1);
SET pinyin_str = NULL;
SELECT pinyin INTO pinyin_str FROM pinyin_data WHERE hanzi = str_char ; -- 汉字转换为拼音字符串
SET pinyin_str = IFNULL(pinyin_str,str_char);
-- 判断","逗号情况
SET judge_index = POSITION(',' IN pinyin_str);
IF (judge_index >= 1) THEN
SET pinyin_str = LEFT(pinyin_str , judge_index-1);
END IF;
-- 判断空格情况
SET judge_index = POSITION(' ' IN str_char);
IF (judge_index >= 1) THEN
SET pinyin_str = LEFT(pinyin_str , judge_index - 1);
END IF ;
SET result = CONCAT(result,pinyin_str);
SET default_index = default_index + 1 ;
END WHILE ;
RETURN LOWER(result) ;
END
3、测试效果如下:
a. SELECT chinese_to_pinyin('中华');
b. SELECT chinese_to_pinyin('中 华');
c. SELECT chinese_to_pinyin('中 ,华');
三、总结
1、MySQL 创建函数,和存储过程差不多。区别:存储过程可以没有返回值,也可以有1个或多个返回值。 函数必须有返回值,仅仅只有1个。 (不知道这样总结是否正确?)
2、汉字转换为拼音,常用于根据名字生成用户名,登录名等。
3、pinyin_data 表数据太多,有2万多条,需要的可以私信,谢谢。
参考资料:
MySQL触发器资料整理创建触发器及查看、删除触发器
MySQL存储过程学习整理,游标使用,参数输入输出
MyBatis调用存储过程,MyBatis调用函数的使用方法
MySQL 创建函数, MySQL定义函数实现汉字转拼音 MySQL汉字转拼音MySQL汉字生成拼音字符串