网站建设知识
MySql自定义函数,存储过程,游标的使用
2025-07-22 10:00  点击:0

首先整理一下mysql内置的一些函数

MySQL内置函数

一、字符函数

(1)ConCAT()//字符连接

(2)CONCAT_WS()//使用指定的分隔符进行字符连接

(3)FORMAT()//数字格式化

(4)LOWER()//转化小写

(5)UPPER()//转换大写

(6)LEFT()//获取左侧字符

(7)RIGHT()//获取右侧字符

(8)LENGTH()//取得字符串长度

(9)LTRIM(),RTRIM(),TRIM()//删除前导、后续空格或者指定字符

(10)REPLACE()//替换

(11)SUBSTRING()//字符串截取

(12)[NOT] LIKE//模式匹配——百分号%代表任意个字符;下划线_代表任意一个字符

二、数值函数

(1)CEIL()//进一取整

(2)FLOOR()//舍一取整

(3)DIV//整数除法

(4)MOD//取余数,与%一样

(5)POWER()//幂运算

(6)ROUND()//四舍五入

(7)TRUNCATE()//截断

三、比较函数

(1)[NOT] BETWEEN…AND… //[不]范围之内

(2)NOT IN() //[不]在列出值范围内

(3)IS [NOT] NULL //[不]为空

四、日期时间函数

(1)SELECT NOW(); // 当前日期时间

(2)SELECT CURDATE(); // 当前日期

(3)SELECT CURTIME(); // 当前时间

(4)SELECT DATE_ADD();//日期的变化

(5)DATEDIFF(); // 日期的差值

(6)DATE_FORMAT(); // 日期格式化

五、信息函数

(1)SELECT CONNECTION_ID() //连接ID

(2)SELECT DATAbase() //当前数据库

(3)SELECT LAST_INSERT_ID() //最后插入记录的ID

(4)SELECT USER() //当前用户

(5)SELECT VERSION() //版本信息

六、聚合函数

(1)AVG()//平均值

(2)COUNT()//计数

(3)MAX()//最大值

(4)MIN()//最小值

(5)SUM()//求和

七、加密函数

(1)MD5();//信息摘要算法

(2)PASSWORD();//加密算法,主要用途修改当前用户密码

用户自定义函数

简称UDF(user-defined function),其用法与内置函数相同

函数可以返回任意类型的值,也可以接受这些类型的参数,参数不能超过1024个;

创建自定义函数:

CREATE FUNCTION function_nameRETURNS{STRING/INTEGER/REAL/DECIMAL}routine_body - 函数体

函数体:

(1)函数体由合法的SQL语法构成;

(2)函数体可以是简单的SELECT或INSERT语句;

(3)函数体如果为复合结构则使用BEGIN…END语句;

(4)复合结构可以包括声明,循环,控制结构。

(5)RETURNS TYPE语句表示函数返回数据的类型;

注意:RETURNS CHAR(50)数据类型的时候,RETURNS 是有S的,而RETURN (SELECT 语句)的时候RETURN是没有S的

如果在存储函数中的RETURN语句返回一个类型不同于函数的RETURNS子句中指定类型的值,返回值将被强制转换为恰当的类型。

例如,如果一个函数返回一个SET或ENUM值,但是RETURN语句返回一个整数,对于SET成员集的相应ENUM成员,从函数返回的值是字符串。

(FUNCTION中总是默认是IN参数)RETURNS子句对FUNCTION做指定,对函数而言这是强制的。他用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句

创建不带参数的自定义函数

1. 自定义函数f1

DROP FUNCTION  IF EXISTS f1CREATE FUNCTION f1()RETURNS VARCHAR(30)RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点%m分%s秒')

调用函数f1()

SELECT f1();

2.定义带参数的函数

CREATE FUNCTION f2(a SMALLINT UNSIGNED, b SMALLINT UNSIGNED)RETURNS FLOAT(10,2) UNSIGNEDRETURN (a+b)/3
SELECT f2(10, 15)

定义带有多参数,多条语句的自定义函数

修改分隔符:DELEMITER 分隔符

例:DELIMITER // DECLARE ConTINUE HANDLER FOR NOT FOUND SET no_more_products = 1; CREATE TEMPORARY TABLE infologs ( Id int(11) NOT NULL AUTO_INCREMENT, Msg varchar(255) NOT NULL, PRIMARY KEY (Id) ); OPEN cur_product; FETCH cur_product INTO prd_code; REPEAT SELECT quantity INTO quantity_in_stock FROM products WHERE code = prd_code; IF quantity_in_stock < 100 THEN INSERT INTO infologs(msg) VALUES (prd_code); END IF; FETCH cur_product INTO prd_code; UNTIL no_more_products = 1 END REPEAT; CLOSE cur_product; SELECT * FROM infologs; DROP TABLE infologs; END // DELIMITER ;