mysql中自定义函数编程

语法:

新建:

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

函数体

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

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

参数部分,由参数名和参数类型组成。

返回值类类型

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

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

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

删除:

Dropfunction if existsfunction_name;

查看:

Show function status like ‘partten’

Show create functionfunction_name;

修改:

Alter functionfunction_name函数选项。

例子:

Hello world!

IF语句

IF search_conditionTHEN

statement_list

[ELSEIF search_conditionTHENstatement_list]

...

[ELSE statement_list]ENDIF;

CASE语句

CASE case_value

WHEN when_valueTHENstatement_list

[WHEN when_value THENstatement_list]

...

[ELSE statement_list]

END CASE;

循环:

While

[begin_label:]WHILEsearch_conditionDO

statement_list

END WHILE [end_label];

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

退出循环

退出整个循环leave         相当于break

退出当前循环iterate         相当于 continue

通过退出的标签决定退出哪个循环。

变量声明:

语法:

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

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

使用

语序使用 set 和 select into语句为变量赋值。

注意在函数内是可以使用全局变量(用户自定义的变量的)@XXX   全局变量不用声明 可以直接@XXX使用。

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

参考学生表

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)

);

计算新增学号

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),‘001‘);     #concat() 函数的作用是连接字符串。

else

return concat(left(last_no,7),lpad(right(last_no,3)
+ 1, 3, ‘0‘));

end if;

#return @last_no;

end

$$

delimiter ;

随机获得学生名字。

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 ;

========================================================================================

mysql常用内置函数

数值函数

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位小数

时间日期函数

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();//从时间戳获得时间

字符串函数

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 )   //逐字符比较两字串大小

流程函数:

CASE WHEN [condition]THEN result[WHEN [condition]THEN result ...][ELSE result]END   多分支

IF(expr1,expr2,expr3)  双分支。

聚合函数

Count()

Sum();

Max();

Min();

Avg();

Group_concat()

其他常用函数

Md5();

Default();

mysql中自定义函数编程

时间: 2024-10-10 14:10:44

mysql中自定义函数编程的相关文章

mysql 中自定义变量排序

$temporary1 = DB::select('select hair_bbs_article.*,hair_member.nickname,hair_member.headphoto,' .' ('.$articleSort.' +(hair_bbs_article.order * '.$tenDayTime.')) as order1 from hair_bbs_article' .' left join hair_member on hair_bbs_article.mid = hai

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

转:http://blog.sina.com.cn/s/blog_1512521570102wrfl.htmlselect cost,@a:[email protected]+1 from testone,(select @a:=0) as a; mysql中变量不用事前申明,在用的时候直接用"@变量名"使用就可以了. 第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量 第二种用法:select @num:=1; 或 se

Mysql中的函数

阅读目录 什么是函数 与存储过程的区别 mysql自带函数 自定义函数 什么是函数 mysql中的函数与存储过程类似,都是一组SQL集: 与存储过程的区别 函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回值: 函数可以嵌入到sql语句中使用,而存储过程不能: 函数一般用于实现较简单的有针对性的功能(如求绝对值.返回当前时间等),存储过程用于实现复杂的功能(如复杂的业务逻辑功能): mysql自带函数 mysql本身已经实现了一些常见的函数,如数学函数.字符串函

Scrapy基础(十二)————异步导出Item数据到Mysql中

异步导出数据到Mysql中 上次说过从Item中同步写入数据库,因为网络的下载速度和数据库的I/O速度是不一样的所以有可能会发生下载快,但是写入数据库速度慢,造成线程的堵塞:关于堵塞和非堵塞,同步和异步的关系,因为没接触过,所以也不是很好的理解,这里查看了些资料,已做记录 链接1:https://www.zhihu.com/question/19732473;http://wiki.jikexueyuan.com/project/twisted-intro/ 实现异步写入mysql数据库的思路:

GreenPlum中自定义时间转换函数

最近数据库架构调整,一部分业务从MySQL迁移到GreenPlum上去,原来MySQL中自带有unix_timestamp和from_unixtime两个函数可以实现标准时间和UNIX时间的相互转换,翻了下GreenPlun的文档,没有发现有类似的函数,于是便使用python自定义了这两个函数,并在这两个函数的基础上实现了两个业务相关的函数,这里记录一下. 1.首先创建一个python language. testdb=# create language plpythonu; CREATE LA

mysql中索引,触发器,事务,存储引擎的理解

1.索引:作用于表中的某列,并将其进行排序,有助于快速地进行查询. 索引是对数据库表中一个或多个列的值进行排序的数据结构,是用于提高在数据库表中访问数据的速度的数据库对象.其实索引相当于一本书的目录,如果没有索引,要想在数据库中查找某一特定的值就需要遍历整个数据库表,但是有了索引之后就可以在索引当中查找,有助于更快地获取信息: 索引可分为聚集索引和非聚集索引: 聚集索引:是按照数据存放的物理位置为顺序的: 非聚集索引中,表数据存储顺序与索引顺序无关:一张表上只能创建一个聚集索引,因为真实数据的物

MySQL中变量的总结

本文对MySQL中局部变量.用户变量.系统变量的理解进行总结. 一.局部变量 局部变量由DECLARE语句声明: DECLARE var_name[,...] type [DEFAULT value] 默认值由DEFAULT子句来声明,默认值也可以是一个表达式. 局部变量的作用范围仅限在它被声明的BEGIN...END块内,当语句执行完毕,局部变量就消失了. 二.用户变量 可以先在用户变量中保存值然后在以后引用它:这样可以将值从一个语句传递到另一个语句.用户变量与连接有关.也就是说,一个客户端定

查询MySQL中某个数据库中有多少张表

SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES   WHERE table_schema = '数据库' GROUP BY table_schema; 这还是头一次接触information_schema这个数据库, information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式.什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等.有些时候用于表

(13)mysql中的流程控制

概述 在mysql中可以使用if/case/loop/leave/iterate/repeat/while语句进行流程控制. if语句 if语句实现条件判断,类似高级语言(c/c++/php/java等)中的if语句. if search_condition then statement_list [elseif search_condition then statement_list]... [else statement_list] end if 举例 if mobile='13911113