14 mysql 函数
在mysql中,函数主要分为内置函数(系统函数)和自定义函数
不管是内置函数还是自定义函数,都是使用 select 函数名(参数列表);
字符串函数
char_length():判断字符串的字符数
length():判断字符串的字节数(字符集有关)
SELECT char_length('你好,中国'),length('你好,中国'); -- 返回结果:5 13
concat():连接字符串
SELECT CONCAT('你好','呀','中国');
instr():判断字符在字符串中是否存在,如果存在返回其位置,不存在返回0
SELECT instr('你好中国呀','国'); -- 返回结果:4
lcase():全部小写
SELECT LCASE('HELLO World'); -- 返回结果:hello world
left():从1开始,截取指定长度的字符串
SELECT left('hello world',3);
mid():从中间指定位置截取字符串,如果不指定截取长度,直接截取到最后
SELECT mid('hello world',2);
ltrim():消除左边对应的空格
日期函数
now():返回当前日期时间 yyyy-mm-dd hh:ii:ss
SELECT now();
curdate():返回当前日期 yyyy-mm-dd
SELECT CURDATE();
curtime():返回当前时间 hh:ii:ss
SELECT curtime();
datediff():判断2个日期之间的天数差:参数日期必须使用字符串格式
-- 只返回相差的天数:6
-- 第一个参数 比 第二个参数大
SELECT datediff('2024-07-07 12:20:23','2024-07-01 02:25:32');
date_add():时间的增加
-- 语法
date_add(日期,interval 数字时间 type);
type:day、hour、minute、second
SELECT date_add('2024-07-16 12:12:00',INTERVAL 20 day); -- 返回2024-08-05 12:12:00
unix_timestamp():获取时间戳
SELECT UNIX_TIMESTAMP();
from_unixtime():将指定时间戳转换为时间格式:yyyy-mm-dd hh:ii:ss
SELECT FROM_UNIXTIME(1721100277);
数学函数
abs():绝对值
ceiling():向上取整
floor():向下取整
round():四舍五入
pow():求指数,谁的多少次方
rand():获取0-1之间的随机数
其他函数
md5():对数据进行md5加密(在myqsl中的md5和其他任何地方使用md5加密出来的内容都是一样的)
SELECT MD5('a');
version():获取mysql版本号
SELECT VERSION();
database():获取当前所在数据库
SELECT DATABASE();
uuid():生成唯一标识符,作用和自增长差不多。自增长是单表唯一,uuid是整库唯一。一般不使用
字段相关函数
获取指定结果集中所有的字段数
mysql_num_fields()
获取结果集中指定位置的字段名
mysql_field_name()
自定义函数
函数:实现某个具体功能的语句块(语句块:多条语句组成)
函数内部的每条指令都是一个独立的个体:需要符合语句定义规范
函数是一个整体,而且函数是在调用的时候才会执行:那么当我们设计函数的时候,就不能中断,但是mysql有个特性就是一旦见到语句结束分号,就会自动执行
解决方案:在定义函数之前,尝试修改临时语句结束符
-- 语法:delimiter
-- 1. 修改临时语句结束符:
delimiter 新符号; -- 一般是使用2个 $$ 符号作为临时结束符
中间为正常的sql指令:可以使用分号结束,但是系统不会执行,因为此时已经修改了语句结束符
-- 2. 使用 新修改的符号结束符 结束
-- 3. 修改回原来的语句结束符
delimiter ;
自定义函数是属于用户级别的,只有当前客户端对应的数据库中可以调用函数使用
可以在不同的数据库下看到对应的函数,但是不可以调用
因为函数必须有规范的返回值,所以函数内部不能将select查询语句的结果返回,但是:select 字段 into @变量
可以使用
创建函数
-- 修改临时语句结束符
delimiter $$
-- 创建函数
-- DEFINER=`root`@`localhost` 加上,不加就报错了
create DEFINER=`root`@`localhost` function 函数名(形参) returns 返回值
begin
-- 中间是函数体
函数体
return 返回值数据; -- 返回的数据类型必须与结构中定义的返回值类型一致
end
-- 语句结束符
$$
-- 再修改回原来的语句结束符
delimiter ;
-- 如果在创建的过程中,报错了,可以尝试将 log_bin_trust_function_creators 设置为 on:
-- og_bin_trust_function_creators是一个全局系统变量,其值为布尔型(0或1),主要影响MySQL对存储函数创建、修改权限的控制以及这些函数在二进制日志记录中的行为,默认是off
show VARIABLES like 'log_bin_trust_function_creators%' -- 查看值
SET GLOBAL log_bin_trust_function_creators=ON; -- 修改值
1. 构建一个返回值是int的无参函数
-- 修改语句结束符
delimiter $$
CREATE DEFINER=`root`@`localhost` FUNCTION stuCount() RETURNS int
BEGIN
-- 使用declare 定义一个num变量,默认值是0
declare num int default 0;
-- 将查询数量出的数值赋值num
SELECT count(*) into num from student;
RETURN num;
END
-- 函数结束
$$
-- 修改语句结束符,改回原来的
delimiter ;
SELECT stuCount();
并不是所有的函数都需要begin和end,如果函数体本身就只有一条return指令,可以省略begin和end
create function memo3() returns int
return 100;
在mysql中,需要为形参指定数据类型,形参可以有多个
-- 语法
变量名 字段类型
查看函数
方式一:通过查看函数状态
show function status [like '匹配模式']
-- 查询 mydb 里面的函数
SHOW FUNCTION STATUS WHERE Db='mydb';
方式二:通过 函数创建语句
show create function 函数名;
-- 查看
show create function stuCount;
调用函数
select 函数名(实参列表);
删除函数
drop function 函数名;
-- 删除函数
drop FUNCTION sum1;