MySQL 创建函数, MySQL定义函数实现汉字转拼音 MySQL汉字转拼音MySQL汉字生成拼音字符串

MySQL 创建函数, MySQL定义函数实现汉字转拼音 MySQL汉字转拼音

 

一、MySQL创建函数

1、语法

CREATE FUNCTION fun_name([paramName type , paramName type]) RETURNS type

BEGIN

-- do something

RETURN type;

END
  • fun_name: 函数名称,自定义 ,不可重复。
  • paramName type:参数名称、参数类型 , 可选,非必填项。
  • RETURNS type :返回值类型,必填的。

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汉字生成拼音字符串

       MySQL创建视图

      MySQL WHILE和LOOP和REPEAT循环的用法区别 MySQL三种循环的区别 MySQL循环使用方法

发布了156 篇原创文章 · 获赞 159 · 访问量 49万+

猜你喜欢

转载自blog.csdn.net/HaHa_Sir/article/details/101643806