(1)
函数的作用:
1.1
主要是用来进行逻辑处理,逻辑计算;
1.2
且可以在DML(select/insert/update/delete)中进行调用(比存储过程强).其条件是:
function内容,只能是输入参数的逻辑处理;
或为查询:但查询只能select结果只有一条记录的或如sum等计算。
1.3
同时不能里含有DML语句(不如存储过程).
(2)
三点与存储过程不同的地方:
1,必须要一个RETURNS语句来定义返回值类型
2,不能指定参数的IN、OUT或INOUT修饰符,所有参数隐式的为IN
3,Function体必须包含RETURN语句来终结Function执行并返回指定的结果给调用者
(3)
在命令行查看方式:
show function status;
show create function ***;
在命令行调用方法:
select fun_sum(1) //
(4)
实例一:
delimiter //
drop function if exists fun_sum //
createfunction fun_sum(userid double)
returns double
begin
declareta double;
select sum(totalamount) into ta from customer wherectype=userid;
set ta=ta+10000;
return ta;
end //
命令行调用时,用:select fun_sum(1) //
可在select / insert /update /delete中调用函数。如下:
insertinto customer values(3,fun_sum(2))//
update customer set ctype=4where totalamount=fun_sum(2);
(5)
关于function中的insert/update/delete:
函数中,也可以有insert,update,delete这些操作,只能用命令行方式:select function()进行调用.
若要用DML(select/insert/update/delete)中调用函数,则函数中不可以有insert/update/delete等操作.
(6)
mysql常用内建函数
(6.1)字符串function
CONCAT
string = CONCAT(string [, ...])
返回字符串相加的结果
如果sql_mode='ANSI',还可以使用||操作符来进行字符串相加
INSERT
string = INSERT(original_string, position, length,new_string)
在指定position将new_string插入original_string,直到length个字符
INSTR
position = INSTR(string, substring)
返回substring在string中第一个出现的position,如果没有找到,则返回0
LCASE
string = LCASE(string)
返回string转换为lowercase的形式
LEFT
string = LEFT(string, length)
返回string最左边length长度的字符串
LENGTH
characters = LENGTH(string)
返回字符串的长度,对于多字节字符串则应该使用CHAR_LENGTH来返回字符的长度而不是字节的长度
LOAD_FILE
string = LOAD_FILE(file_name)
读取MySQL服务器上的一个文件并返回合适类型(BLOG或TEXT)
LOCATE
position = LOCATE(substring, string [,start_position])
类似于INSTR,它在string里搜索一个substring,并可以知道开始搜索的位置,如果没有找到则返回0
LPAD
string = LPAD(string, length, pad)
将pad加到string的左边直到输出的字符串的长度达到length
LTRIM
string = LTRIM(string)
去掉string左边所有的空格
REPEAT
string = REPEAT(string, count)
返回string重复count次数的字符串
REPLACE
string = REPLACE(string, search_string, replace_string)
在string中搜索search_string,用replace_string来替换
RPAD
string = RPAD(string, length, pad)
将pad加到string的右边直到输出的字符串的长度达到length
RTRIM
string = RTRIM(string)
去掉string右边所有的空格
STRCMP
string = STRCMP(string1, string2)
比较两个字符串大小,类似于C里的strcmp函数,返回值为0,-1,1
SUBSTRING
string = SUBSTRING(string, position, [,length])
返回从指定position开始length长度的子字符串,position可以为负数
TRIM
string = TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string)
默认trim空格,指定padding则trim padding,可以知道trim前面、后面或两者
UCASE
string = UCASE(string)
返回string转换为uppercase的形式
(6.2)数字function
ABS
number = ABS(number)
返回绝对值
CEILING
number = CEILING(numer)
返回稍大的整数
FLOOR
number = FLOOR(number)
返回比number稍小的整数
FORMAT
string = FORMAT(number, decimal_places)
使用指定的decimal_place小数位来格式化number,并在每个千位上加上逗号来进行分隔
LEAST
number = LEAST(number1, number 2 [, ...])
返回最小的数
MOD
remmainder = MOD(numerator, denominator)
求模
POW/POWER
result = POWER(number, power)
求幂,power可以为整数、小数、负数
ROUND
integer = ROUND(number [,decimals])
将浮点数转换为最接近的整数,四舍五入,可以指定精确到小数位decimals
SIGN
Java代码
number = SIGN(number)
返回-1、0、1来分别表示负数、0、正数
SQRT
number = SQRT(number)
求平方根,相当于POWER(number, .5)
(6.3)其他
BENCHMARK
zero =BENCHMARK(no_of_repeats, expressions)
重复执行指定的表达式,可以用于MySQL调优
COALESCE
value = COALESCE(value [,...])
返回列表里第一个非空的值
GET_LOCK
return_code = GET_LOCK(lock_name, timeout)
给定名字lock_name来定义锁,返回锁号码
RELEASE_LOCK
return_code = RELEASE_LOCK(lock_name)
解锁,返回锁号码
7)IS_FREE_LOCK
integer = IS_FREE_LOCK(lock_name)
如果用户定义的名为lock_name的锁可以获得,则返回1,否则返回0
IFNULL
value = IFNULL(value, nullvalue)
如果value不为NULL则返回value,否则返回第二个参数nullvalue
INTERVAL
position = INTERVAL(search, number, ...)
返回search应该在后面的列表的位置,从0开始,后面的列表应该为升序
ISNULL
integer = ISNULL(value)
如果value是NULL则返回1,否则返回0
NULLIF
value = NULLIF(value1, value2)
如果value1和value2相等,则返回NULL,否则返回value1
UUID
string = UUID()
返回128位的Universal UniqueIdentifier(UUID),唯一值,部分来自你的计算机名、当前日期和时间。