1.语法

1.1 新建函数

Create function function_name(参数列表) returns 返回值类型

函数体

(1)函数名,应该合法的标识符,并且不应该已有的关键字冲突

(2)一个函数应该属于某个数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库。

(3)参数部分,由参数名参数类型组成。

(4)返回值类类型。

(5)函数体由多条可用的mysql语句流程控制变量声明等语句构成。

(6)多条语句应该使用begin end语句块包含。

注意,一定要有return返回值语句。

1.2 删除

Dropfunction if exists function_name;

1.3 查看

Show function status like ‘partten’
Show create function function_name;

1.4 修改

Alter function function_name函数选项;

2. 程序控制

2.1 IF语句

IF search_condition THEN
statement_list
[ELSEIF search_condition THEN statement_list]
...
[ELSE statement_list]END IF;

2.2 CASE语句

CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]
...
[ELSE statement_list]
END CASE;

2.3 While循环

[begin_label:]WHILE search_condition DO
  statement_list
END WHILE [end_label];

  如果需要在循环内提前终止while循环,则需要使用标签标签需要成对出现

2.4 退出循环

(1)退出整个循环leave 相当于break

(2)退出当前循环iterate 相当于 continue

(3)通过退出的标签决定退出哪个循环

3. 变量声明

3.1 语法

DECLARE var_name[,...] type [DEFAULT value]

  这个语句被用来声明局部变量。要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句初始值NULL

3.2 赋值

  使用语序使用 setselect into语句为变量赋值

3.3 注意  

(1)在函数内是可以使用全局变量(用户自定义的变量的)

(2)@XXX 全局变量不用声明 可以直接@XXX使用。

4.例子

 获取当前班级内,最大的学号。

(1)参考学生表

create table join_student(
stu_id int not null auto_increment,
stu_no char(10),
class_id int not null,
stu_name varchar(10),
stu_info text,
primary key (stu_id)
);

(2)计算新增学号

drop function if existssno;
delimiter $$ #在包含有语句块时 可以更换语句结束符“;” 为“$$”
create function sno(c_id int)returns char(10)
begin
declare last_no char(10); #声明一个局部变量 用来保存当前最大的学号, 如果没有就为null
declare class_name char(10);
select stu_no from join_student where class_id=c_id order by stu_no desc limit 1 into last_no;
if last_no is null then #如果为空代表当前班级没有学生 从1开始,获得班级名字
return concat ((select c_name from join_class where id=c_id into class_name),''); #concat() 函数的作用是连接字符串。
else
return concat(left(last_no,7),lpad(right(last_no,3) + 1, 3, ''));
end if;
#return @last_no;
end
$$
delimiter ;

(3)随机获得学生名字。

drop function if exists sname;
delimiter $$
create function sname() returns char(2)
begin
declare first_name char(16) default '赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨';
declare last_name char(10) default '甲乙丙丁戊己庚辛壬癸';
declare full_name char(2);
set full_name=concat(substring(first_name,floor(rand()*16+1), 1), substring(last_name,floor(rand()*10+1), 1));
return full_name;
end
$$
delimiter ;

5.mysql常用内置函数

5.1 数值函数

Abs(X)                   //绝对值abs(-10.9) = 10
Format(X,D)               //格式化千分位数值format(1234567.456, 2) =1,234,567.46
Ceil(X)                  //向上取整ceil(10.1) = 11
Floor(X)                 //向下取整floor (10.1) = 10
Round(X)                 //四舍五入去整
Mod(M,N)                  //M%N M MOD N 求余 10%3=1
Pi()                    //获得圆周率
Pow(M,N)                  //M^N求指数
Sqrt(X)                  //算术平方根
Rand()                  //随机数
TRUNCATE(X,D)               //截取D位小数

5.2 时间日期函数

Now(),current_timestamp()        //当前日期时间
Current_date()              //当前日期
current_time()              //当前时间
Date(‘yyyy-mm-dd HH;ii:ss’) //获取日期部分
Time(‘yyyy-mm-dd HH;ii:ss’)      //获取时间部分
Date_format(‘yyyy-mm-dd HH;ii:ss’,’%D %y %a %d %m %b %j');
Unix_timestamp()            //获得unix时间戳
From_unixtime();            //从时间戳获得时间

5.3 字符串函数

LENGTH(string )             //string长度,字节
CHAR_LENGTH(string) //string的字符个数
SUBSTRING(str ,position [,length ]) //从str的position开始,取length个字符
REPLACE(str ,search_str ,replace_str) //在str中用replace_str替换search_str
INSTR(string ,substring )       //返回substring首次在string中出现的位置
CONCAT(string [,... ])         //连接字串
CHARSET(str)               //返回字串字符集
LCASE(string )              //转换成小写
LEFT(string ,length )          //从string2中的左边起取length个字符
LOAD_FILE(file_name) //从文件读取内容
LOCATE(substring , string [,start_position ]) //同INSTR,但可指定开始位置
LPAD(string ,length ,pad )      //重复用pad加在string开头,直到字串长度为length
LTRIM(string )              //去除前端空格
REPEAT(string ,count )         //重复count次
RPAD(string ,length ,pad)       //在str后用pad补充,直到长度为length
RTRIM(string )             //去除后端空格
STRCMP(string1 ,string2 )       //逐字符比较两字串大小

5.4 流程函数

CASE WHEN [condition]THEN result[WHEN [condition]THEN result ...][ELSE result]END 多分支
IF(expr1,expr2,expr3) 双分支。

5.5 聚合函数

Count()
Sum();
Max();
Min();
Avg();
Group_concat()

5.6 其他常用函数

Md5();
Default();

Mysql中自定义函数编程的更多相关文章

  1. MySQL中自定义排序

    在开发时候,我们经常使用的是默认的排序规则,但在某些特殊情况下,通过指定顺序来进行排序 -- fileld自定义排序时,应该是非主键的,否则主键是无效 SELECT * FROM customer W ...

  2. 记录一次mysql中自定义获取UUID的函数

    循环方式一: DELIMITER :; drop function if exists test.fn_test:; create function test.fn_test() ) begin ) ...

  3. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  4. mysql查询语句中自定义变量(转)

    转:http://blog.sina.com.cn/s/blog_1512521570102wrfl.htmlselect cost,@a:=@a+1 from testone,(select @a: ...

  5. MySQL中的while、repeat、loop循环

    循环一般在存储过程和存储函数中使用频繁,这里只给出最简单的示例 while delimiter $$ create procedure test_while() begin declare sum i ...

  6. MySQL中的information_schema数据库详解

    information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式.什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等.有些时候用于表述该信 ...

  7. Mysql中的函数

    什么是函数 mysql中的函数与存储过程类似,都是一组SQL集: 与存储过程的区别 函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回值: 函数可以嵌入到sql语句中 ...

  8. mysql创建自定义函数与存储过程

    mysql创建自定义函数与存储过程 一 创建自定义函数 在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题 mysql ...

  9. MySQL之自定义函数

    引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利,比如我前面提到过的聚合函数SUM().AVG()以及日期时间函数等等,可是我们总会出现其他的需求:我们需要 ...

随机推荐

  1. 简单服务端缓存API设计

    Want 我们希望设计一套缓存API,适应不同的缓存产品,并且基于Spring框架完美集成应用开发. 本文旨在针对缓存产品定义一个轻量级的客户端访问框架,目标支持多种缓存产品,面向接口编程,目前支持简 ...

  2. HTML5的LocalStorage和sessionStorage的使用

    本文转载自:http://www.cnblogs.com/qiutianlidehanxing-blog/p/5953746.html html5中的Web Storage包括了两种存储方式:sess ...

  3. linux中日志文件查找,根据关键字,vi命令,awk和wc

    参考: http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html 当时需求:查看系统日志,统计系统的处理时间(从请求进去系统到系 ...

  4. Java-Runoob:Java Character 类

    ylbtech-Java-Runoob:Java Character 类 1.返回顶部 1. Java Character 类 Character 类用于对单个字符进行操作. Character 类在 ...

  5. python中包和模块的使用说明

    python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用. 如果想 ...

  6. 解决easyui jQuery JS的for循环调用ajax异步问题

    由于JS的for循环与ajax非同步运行,因此导致for循环结束了而ajax却还未执行,解决此方法有两种 1.设置ajax参数async为false,即与js同步,默认是true(异步). 这里首先引 ...

  7. 【BZOJ】2456 mode(乱搞)

    Description 给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数. Input 第1行一个正整数n.第2行n个正整数用空格隔开. Output 一行一个正整数表 ...

  8. rownum, row_number(), rank() , dense_rank(), partition by ,max() keep 语句的区别与用法

    rownum,rownumber(), rank(),dense_rank()都是用来为记录分配序号的, rownum只能在orderby语句排完序后,在外层嵌套查询才能获得正确的行号,用起来相当复杂 ...

  9. 各自平台token获取解析及用户信息的获取

    1.auth根据手机号码获取auth平台session_token记统一认证的user_id与pass_id [dwliuchao1@GD-QHD-CNG152TFKX-12.55 logs]$ cd ...

  10. 28_java之mysql的CRUD

    01数据库概念 * A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. * B: 什么是数据 ...