(1)
函數(shù)的作用:
1.1
主要是用來進(jìn)行邏輯處理,邏輯計(jì)算;
1.2
且可以在DML(select/insert/update/delete)中進(jìn)行調(diào)用(比存儲(chǔ)過程強(qiáng)).其條件是:
function內(nèi)容,只能是輸入?yún)?shù)的邏輯處理;
或?yàn)椴樵儯旱樵冎荒躶elect結(jié)果只有一條記錄的或如sum等計(jì)算。
1.3
同時(shí)不能里含有DML語句(不如存儲(chǔ)過程).
(2)
三點(diǎn)與存儲(chǔ)過程不同的地方:
1,必須要一個(gè)RETURNS語句來定義返回值類型
2,不能指定參數(shù)的IN、OUT或INOUT修飾符,所有參數(shù)隱式的為IN
3,F(xiàn)unction體必須包含RETURN語句來終結(jié)Function執(zhí)行并返回指定的結(jié)果給調(diào)用者
(3)
在命令行查看方式:
show function status;
show create function ***;
在命令行調(diào)用方法:
select fun_sum(1) //
(4)
實(shí)例一:
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 //
命令行調(diào)用時(shí),用:select fun_sum(1) //
可在select / insert /update /delete中調(diào)用函數(shù)。如下:
insertinto customer values(3,fun_sum(2))//
update customer set ctype=4where totalamount=fun_sum(2);
(5)
關(guān)于function中的insert/update/delete:
函數(shù)中,也可以有insert,update,delete這些操作,只能用命令行方式:select function()進(jìn)行調(diào)用.
若要用DML(select/insert/update/delete)中調(diào)用函數(shù),則函數(shù)中不可以有insert/update/delete等操作.
(6)
mysql常用內(nèi)建函數(shù)
(6.1)字符串function
CONCAT
string = CONCAT(string [, ...])
返回字符串相加的結(jié)果
如果sql_mode='ANSI',還可以使用||操作符來進(jìn)行字符串相加
INSERT
string = INSERT(original_string, position, length,new_string)
在指定position將new_string插入original_string,直到length個(gè)字符
INSTR
position = INSTR(string, substring)
返回substring在string中第一個(gè)出現(xiàn)的position,如果沒有找到,則返回0
LCASE
string = LCASE(string)
返回string轉(zhuǎn)換為lowercase的形式
LEFT
string = LEFT(string, length)
返回string最左邊length長(zhǎng)度的字符串
LENGTH
characters = LENGTH(string)
返回字符串的長(zhǎng)度,對(duì)于多字節(jié)字符串則應(yīng)該使用CHAR_LENGTH來返回字符的長(zhǎng)度而不是字節(jié)的長(zhǎng)度
LOAD_FILE
string = LOAD_FILE(file_name)
讀取MySQL服務(wù)器上的一個(gè)文件并返回合適類型(BLOG或TEXT)
LOCATE
position = LOCATE(substring, string [,start_position])
類似于INSTR,它在string里搜索一個(gè)substring,并可以知道開始搜索的位置,如果沒有找到則返回0
LPAD
string = LPAD(string, length, pad)
將pad加到string的左邊直到輸出的字符串的長(zhǎng)度達(dá)到length
LTRIM
string = LTRIM(string)
去掉string左邊所有的空格
REPEAT
string = REPEAT(string, count)
返回string重復(fù)count次數(shù)的字符串
REPLACE
string = REPLACE(string, search_string, replace_string)
在string中搜索search_string,用replace_string來替換
RPAD
string = RPAD(string, length, pad)
將pad加到string的右邊直到輸出的字符串的長(zhǎng)度達(dá)到length
RTRIM
string = RTRIM(string)
去掉string右邊所有的空格
STRCMP
string = STRCMP(string1, string2)
比較兩個(gè)字符串大小,類似于C里的strcmp函數(shù),返回值為0,-1,1
SUBSTRING
string = SUBSTRING(string, position, [,length])
返回從指定position開始length長(zhǎng)度的子字符串,position可以為負(fù)數(shù)
TRIM
string = TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string)
默認(rèn)trim空格,指定padding則trim padding,可以知道trim前面、后面或兩者
UCASE
string = UCASE(string)
返回string轉(zhuǎn)換為uppercase的形式
(6.2)數(shù)字function
ABS
number = ABS(number)
返回絕對(duì)值
CEILING
number = CEILING(numer)
返回稍大的整數(shù)
FLOOR
number = FLOOR(number)
返回比number稍小的整數(shù)
FORMAT
string = FORMAT(number, decimal_places)
使用指定的decimal_place小數(shù)位來格式化number,并在每個(gè)千位上加上逗號(hào)來進(jìn)行分隔
LEAST
number = LEAST(number1, number 2 [, ...])
返回最小的數(shù)
MOD
remmainder = MOD(numerator, denominator)
求模
POW/POWER
result = POWER(number, power)
求冪,power可以為整數(shù)、小數(shù)、負(fù)數(shù)
ROUND
integer = ROUND(number [,decimals])
將浮點(diǎn)數(shù)轉(zhuǎn)換為最接近的整數(shù),四舍五入,可以指定精確到小數(shù)位decimals
SIGN
Java代碼
number = SIGN(number)
返回-1、0、1來分別表示負(fù)數(shù)、0、正數(shù)
SQRT
number = SQRT(number)
求平方根,相當(dāng)于POWER(number, .5)
(6.3)其他
BENCHMARK
zero =BENCHMARK(no_of_repeats, expressions)
重復(fù)執(zhí)行指定的表達(dá)式,可以用于MySQL調(diào)優(yōu)
COALESCE
value = COALESCE(value [,...])
返回列表里第一個(gè)非空的值
GET_LOCK
return_code = GET_LOCK(lock_name, timeout)
給定名字lock_name來定義鎖,返回鎖號(hào)碼
RELEASE_LOCK
return_code = RELEASE_LOCK(lock_name)
解鎖,返回鎖號(hào)碼
7)IS_FREE_LOCK
integer = IS_FREE_LOCK(lock_name)
如果用戶定義的名為lock_name的鎖可以獲得,則返回1,否則返回0
IFNULL
value = IFNULL(value, nullvalue)
如果value不為NULL則返回value,否則返回第二個(gè)參數(shù)nullvalue
INTERVAL
position = INTERVAL(search, number, ...)
返回search應(yīng)該在后面的列表的位置,從0開始,后面的列表應(yīng)該為升序
ISNULL
integer = ISNULL(value)
如果value是NULL則返回1,否則返回0
NULLIF
value = NULLIF(value1, value2)
如果value1和value2相等,則返回NULL,否則返回value1
UUID
string = UUID()
返回128位的Universal UniqueIdentifier(UUID),唯一值,部分來自你的計(jì)算機(jī)名、當(dāng)前日期和時(shí)間。