-
2021-02-03 04:38:43
自定义函数概念
用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径, 其用法与内置函数相同。
自定义函数的两个必要条件:
参数
返回值 (只能有一个)
MySQL自定义函数支持最多1024个参数.
创建自定义函数
CREATE FUNCTION function_name
RETURNS {STRING|INTEGER|REAL|DECIMAL|...}
routine_body -- 函数体
关于函数体
函数体由合法的SQL语法构成;
函数体可以是简单的SELECT或INSERT语句;
函数体如果为复合结构则使用BEGIN...END语句;
复合结构可以包括声明,循环,控制结构。
不带参数的自定义函数
例如创建日期时间自定义函数:
CREATE FUNCTION f1()
RETURNS varchar(30)
return DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒');
--使用函数
SELECT f1();
DATE_FORMAT()函数在格式化日期格式时,应该是百分号在代表年、月、日的字母前面,字母的大小写不同,所表示格式也有所区别:
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
--其结果是:
2015-07-04
--各字母所表示的含义为:
Y:2015
y:15
M:july
m:07
D:4th
d:04
带参数的自定义函数
CREATE FUNCTION f2
(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN(num1+num2)/2
具有复合结构函数体的自定义函数
这里要用到修改语句分隔符:
DELEMITER 分隔符
--如,将语句分隔符修改为 '//'
DELIMITER //
当函数体内需要执行的是多条语句时,要使用BEGIN...END语句.
且当编写函数体内容的时候,需要使用 DELIMITER 关键字将分隔符 ';' 先修改为别的符合,否则编写语句的时候写到 ';' 时会直接执行,导致函数编写失败.
DELIMITER //
CREATE FUNCTION ADD_USER
(p_id SMALLINT,username VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT user(p_id,username) VALUES(p_id,username);
RETURN LAST_INSERT_ID();
END
删除函数
DROP FUNCTION [IF EXISTS] fun_name;
更多相关内容 -
MySQL自定义函数简单用法示例
2020-12-15 20:41:18本文实例讲述了MySQL自定义函数用法。分享给大家供大家参考,具体如下: 先来一个简单的,创建一个函数将’2009-06-23 00:00:00’这样格式的datetime时间转化为’2009年6月23日0时0分0秒’这样的格式: DELIMITER $... -
浅谈mysql 自定义函数
2020-12-15 07:56:49因为工作需要,要写一个mysql的自定义行数,如下 DELIMITER $$ DROP FUNCTION IF EXISTS `onlineFunction`$$ CREATE FUNCTION `onlineFunction`(rrrr VARCHAR(50)) RETURNS VARCHAR(255) BEGIN IF(rrrr='online') ... -
MySQL 自定义函数CREATE FUNCTION示例
2020-12-15 12:20:25mysql> mysql> delimiter $$ mysql> mysql> CREATE FUNCTION myFunction -> (in_string VARCHAR(255), -> in_find_str VARCHAR(20), -> in_repl_str VARCHAR(20)) -> -> RETURNS VARCHAR(255) -> BEGIN -> DECLARE l... -
MYSQL自定义函数判断是否正整数的实例代码
2020-12-15 20:42:10可以写一个函数: 主要是使用正则来判断。另外输入字符是空的话,使用”-“来替换。 CREATE FUNCTION [dbo].[svf_NonNegativeInteger] ( @val NVARCHAR(4000) ) RETURNS BIT AS BEGIN DECLARE @rtv BIT = 1 ... -
MySQL自定义函数和存储过程示例详解
2021-01-19 22:59:59本文主要给大家介绍的是关于MySQL自定义函数和存储过程的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1、前置条件 MySQL数据库中存在表user_info,其结构和数据如下: mysql> desc... -
mysql自定义函数
2022-04-10 16:06:40mysql自定义函数 1.创建自定义函数 DELIMITER $$ DROP FUNCTION IF EXISTS genPerson$$ CREATE FUNCTION genPerson(name varchar(20)) RETURNS varchar(50) BEGIN DECLARE str VARCHAR(50) DEFAULT ''; SET @...mysql自定义函数
1.创建自定义函数
DELIMITER $$ DROP FUNCTION IF EXISTS genPerson$$ CREATE FUNCTION genPerson(name varchar(20)) RETURNS varchar(50) BEGIN DECLARE str VARCHAR(50) DEFAULT ''; SET @tableName=name; SET str=CONCAT('create table ', @tableName,'(id int, name varchar(20));'); return str; END $$ DELIMITER ;
(1)DELIMITER $$ 定义结束符。MySQL默认的结束符是分号,但是函数体中可能用到分号。为了避免冲突,需要另外定义结束符。
(2)DROP FUNCTION IF EXISTS genPerson$$ 如果函数genPerson已经存在了,就删除掉。
(3)CREATE FUNCTION 创建函数genPerson,函数的参数是name,返回值是varchar(50)。
(4)函数体放在BEGIN 与 END之间。
(5)DECLARE 声明变量,str类型是varchar(50),默认值是空。
(6)CONCAT连接多个字符串。
(7)RETURN 返回拼接后的字符串str。
2.执行
select genPerson('student');
-
MySQL自定义函数
2021-11-25 17:15:25在使用 MySQL 的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数。 自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样,都是由 SQL 语句和过程式语句组成的...转自:微点阅读(www.weidianyuedu.com)微点阅读 - 范文大全 - 免费学习网站
在使用 MySQL 的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数。
自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样,都是由 SQL 语句和过程式语句组成的代码片段,并且可以被应用程序和其他 SQL 语句调用。
自定义函数与存储过程之间存在几点区别:
1.自定义函数不能拥有输出参数,这是因为自定义函数自身就是输出参数;而存储过程可以拥有输出参数。
2.自定义函数中必须包含一条 RETURN 语句,而这条特殊的 SQL 语句不允许包含于存储过程中。
3.可以直接对自定义函数进行调用而不需要使用 CALL 语句,而对存储过程的调用需要使用 CALL 语句。
创建并使用自定义函数
可以使用 CREATE FUNCTION 语句创建自定义函数。
语法格式如下:
CREATE FUNCTION <函数名> ( [ <参数1><类型1> [ , <参数2><类型2>] ] … )
RETURNS <类型>
<函数主体>
语法说明如下:
1.<函数名>:指定自定义函数的名称。注意,自定义函数不能与存储过程具有相同的名称。
2.<参数><类型>:用于指定自定义函数的参数。这里的参数只有名称和类型,不能指定关键字 IN、OUT 和 INOUT。
3.RETURNS<类型>:用于声明自定义函数返回值的数据类型。其中,<类型>用于指定返回值的数据类型。
4.<函数主体>:自定义函数的主体部分,也称函数体。所有在存储过程中使用的 SQL 语句在自定义函数中同样适用,包括前面所介绍的局部变量、SET 语句、流程控制语句、游标等。除此之外,自定义函数体还必须包含一个 RETURN<值> 语句,其中<值>用于指定自定义函数的返回值。
在 RETURN VALUE 语句中包含 SELECT 语句时,SELECT 语句的返回结果只能是一行且只能有一列值。
若要查看数据库中存在哪些自定义函数,可以使用 SHOW FUNCTION STATUS 语句;若要查看数据库中某个具体的自定义函数,可以使用 SHOW CREATE FUNCTION<函数名> 语句,其中<函数名>用于指定该自定义函数的名称。
【实例 1】创建存储函数,名称为 测试函数,该函数返回 SELECT 语句的查询结果,数值类型为字符串类型,输入的 SQL 语句和执行结果如下所示。
mysql> CREATE FUNCTION 测试函数() RETURNS VARCHAR(45) RETURN (SELECT name FROM tb_students_info WHERE id=1);
Query OK, 0 rows affected (0.09 sec)
注意:当使用 DELIMITER 命令时,应该避免使用反斜杠“\”字符,因为反斜杠是 MySQL 的转义字符。
成功创建自定义函数后,就可以如同调用系统内置函数一样,使用关键字 SELECT 调用用户自定义的函数,语法格式为:
SELECT <自定义函数名> ([<参数> [,...]])
【实例 2】调用自定义函数 测试函数,查看函数的运行结果,如下所示。
mysql> SELECT 测试函数();
+---------------+
| 测试函数() |
+---------------+
| Dany |
+---------------+
1 row in set (0.24 sec)
修改自定义函数
可以使用 ALTER FUNCTION 语句来修改自定义函数的某些相关特征。若要修改自定义函数的内容,则需要先删除该自定义函数,然后重新创建。
删除自定义函数
自定义函数被创建后,一直保存在数据库服务器上以供使用,直至被删除。删除自定义函数的方法与删除存储过程的方法基本一样,可以使用 DROP FUNCTION 语句来实现。
语法格式如下:
DROP FUNCTION [ IF EXISTS ] <自定义函数名>
语法说明如下。
<自定义函数名>:指定要删除的自定义函数的名称。
IF EXISTS:指定关键字,用于防止因误删除不存在的自定义函数而引发错误。
【实例 3】删除自定义函数 测试函数,查看函数的运行结果,如下所示。
mysql> DROP FUNCTION 测试函数;
Query OK, 0 rows affected (0.09 sec)
mysql> SELECT 测试函数();
ERROR 1305 (42000): FUNCTION test_db.测试函数 does not exist
-
使用MySQL自定义函数实现金额大小写互转
2017-12-27 11:37:04用MySQL函数实现 小写金额与大写金额的互转,用数据库来实现 -
mysql建立自定义函数的问题
2020-12-15 16:13:57创建函数时问题马上出现: ERROR 1418 (HY000): This routine has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe ... -
mysql自定义函数原理与用法实例分析
2020-12-14 08:05:28本文实例讲述了mysql自定义函数原理与用法。分享给大家供大家参考,具体如下: 本文内容: 什么是函数 函数的创建 函数的调用 函数的查看 函数的修改 函数的删除 首发日期:2018-04-18 什么是函数: 函数... -
mysql自定义函数与动态查询
2021-04-24 21:20:17摘要 腾兴网为您分享:mysql自定义函数与动态查询,智学网,夜读小说,小睡眠,西餐菜谱等软件知识,以及猫语翻译器,江西校讯通,刷qq业务的网站,房洽洽,学士服照,爱站seo工具包,虚拟声卡驱动,隐藏分,卦象,供...摘要 腾兴网为您分享:mysql自定义函数与动态查询,智学网,夜读小说,小睡眠,西餐菜谱等软件知识,以及猫语翻译器,江西校讯通,刷qq业务的网站,房洽洽,学士服照,爱站seo工具包,虚拟声卡驱动,隐藏分,卦象,供零在线永辉,七猫精品小说,海纳百川器,华尔街日报,双十一图片,中国地震信息网等软件it资讯,欢迎关注腾兴网。介绍下mysql自定义函数的例子,以及插入单引号的方法,动态执行查询与字符串拼接的相关内容。 1、mysql自定义函数的例子 mysql不能像oracle 一样写 动态SQL。 复制代码 代码示例: DROP f...
介绍下mysql自定义函数的例子,以及插入单引号的方法,动态执行查询与字符串拼接的相关内容。
1、mysql自定义函数的例子
mysql不能像oracle 一样写 动态SQL。
复制代码 代码示例:
DROP function IF EXISTS getTableMaxId;
delimiter //
CREATE FUNCTION getTableMaxId(table_name varchar(100))
returns int
READS SQL DATA
BEGIN
DECLARE V_ID int;
DECLARE V_COUNT int;
case
when (SELECT 'FEED' LIKE table_name)=1 then
SELECT COUNT(*) INTO V_COUNT FROM FEED;
IF (V_COUNT > 0) THEN
SELECT MAX(FEED_ID) INTO V_ID FROM FEED;
ELSE
SET V_ID = 0;
END IF;
when (SELECT 'FEED_PROVIDER' LIKE table_name)=1 then
SELECT COUNT(*) INTO V_COUNT FROM FEED_PROVIDER;
IF (V_COUNT > 0) THEN
SELECT MAX(FEED_PROVIDER_ID) INTO V_ID FROM FEED_PROVIDER;
ELSE
SET V_ID = 0;
END IF;
end case;
return V_ID;
END;
//
delimiter ;
2、mysql 官方文档:
http://dev.mysql.com/doc/refman/5.1/zh/index.html
3、mysql动态执行SQL
mysql 的自定义函数不能动态执行,只有存储过程可以。
复制代码 代码示例:
create table aa (id int);
delimiter //
create procedure test(v_sql varchar(200))
begin
set @sqltext:=concat('insert into aa ',v_sql);
prepare stmt from @sqltext;
execute stmt;
DEALLOCATE PREPARE stmt;
end;
//
call test('values (1)')//
4、插入单引号
\'
5、Mysql字符串相连接。
在MYSQL中,当用加号“+”连接两个字段(或者多个字段)时,MYSQL会尝试将字段值转换为数字类型(如果转换失败则认为字段值为0),然后进行字段的加法运算。因此,当计算的'12'+'33'时,MYSQL会将“12”和“33”两个字符串尝试转换为数字类型的12和33,然后计算12+33的值,这就是为什么我们会得到45的结果了。
同理,在计算FAge+'1'时,由于FAge为数字类型,所以不需要进行转换,而'1'为字符串类型,所以MYSQL将'1'尝试转换为数字1,然后计算FAge+1做为计算列的值。MYSQL会尝试将加号两端的字段值尝试转换为数字类型,如果转换失败则认为字段值为0。
在MYSQL中进行字符串的拼接要使用CONCAT函数,CONCAT函数支持一个或者多个参数,参数类型可以为字符串类型也可以是非字符串类型,对于非字符串类型的参数MYSQL将尝试将其转化为字符串类型,CONCAT函数会将所有参数按照参数的顺序拼接成一个字符串做为返回值。
例如,以下的sql,用于将用户的多个字段信息以一个计算字段的形式查询出来:
复制代码 代码示例:
SELECT CONCAT('工号为:',FNumber,'的员工的幸福指数:',FSalary/(FAge-21)) FROM T_Employee
相关推荐
-
MySQL自定义函数的使用
2022-01-02 21:12:33在MySQL中有很多内置的函数供我们使用,当我们需要用的函数没有内置的时候我们可以进行自定义函数。这里我分享了无参数与有参数的自定义函数的使用 -
mysql 自定义函数语法
2022-01-12 22:19:05-- =================================== 创建一个自定义函数 mysql8.0以后写法 ================================== DELIMITER $$ CREATE FUNCTION insertData01(startIndex INT) RETURNS INT NO SQL BEGIN ... -
MySQL自定义函数的使用及MySQL中的流程控制语句
2022-04-15 11:43:04MySQL自定义函数 文章目录MySQL自定义函数创建自定义函数自定义函数的调用自定义函数的删除自定义函数的维护流程控制语句条件控制语句循环语句 创建自定义函数 创建自定义函数时, 开发人员需提供函数名、函数参数、... -
MYSQL自定义函数
2022-01-19 11:15:20在使用 MySQL 的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数。 自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样,都是由 SQL 语句和过程式语句组成的... -
mysql 自定义函数
2019-11-01 15:51:55mysql 自定义函数,是对 mysql 扩展的途径,用法和内置函数相同 在工作中,使用 mysql 自带的函数不能满足需要,进而创建更贴近业务的自定义函数 1、创建自定义函数 自定义函数可以接收任意类型的参数,也可以...