使用者自定義函式(user-defined function, udf),是一種對mysql擴充套件的途徑,其用法與內建函式相同,自定義函式的兩個必要條件:函式可以返回任意型別的值,同樣可以接收這些型別的引數(理論上mysql自定義函式引數不能超過1024個)
create function [函式名] returns [返回值型別:string|integer|real|decimal] [函式體];
函式體中:1. 函式體由合法的sql語句構成;
2. 函式體可以是簡單的select或insert語句;
3. 函式體如果為復合結構則使用begin…end語句;
4. 復合結構可以包含宣告,迴圈,控制結構;
select now();//顯示當前時間,如果我要用中文顯示,則需要用到date_format()函式
及就是:select date_format(now(), '%y年%m月%d日 %h點%i分%s秒');
但是每次這樣查詢又太麻煩,於是可以建立乙個不帶參的函式來完成,函式如下:
create function ft() returns varchar(30) return date_format(now(), '%y年%m月%d日 %h點%i分%s秒'); //輸入select ft(),結果為xx年xx月xx日
show function status;
create function func(mum1 smallint unsigned, num2 smallint unsigned)
returns float(10, 2) unsigned
return (num1 + num2)/2;
//帶有引數的求兩數平均值的函式
為了實現乙個輸入名字即插入一條資料的函式功能,我們可以這樣:
create function adduser(username varchar(20)) returns int unsigned
return insert test(username) values(username);
//這條語句實際上是錯誤的,因為最後insert語句執行完畢後的分號會歸納在sql語句中而不被當做函式結束的標識
這時候需要修改結束標識,即用delimiter
//表示結束時必須輸入//
eg:select versiong();//
上述例子末尾加入//才會輸出結果
在此基礎上我們才可以執行建立乙個帶有sql語句的函式(這樣當分號被認為是sql語句的結束符時,我們可以規定其他符號為函式體結束符,例如上述的//)
create function adduser(username varchar(20)) returns int unsigned
return
insert test(username) values(username);
last_insert_id();
//
上述語句也是錯誤的,因為規定返回值int型別,而insert不能作為返回值返回int型別,我們繼續修改,要用到begin…end語句分塊
create function adduser(username varchar(20)) returns int unsigned
begin
insert test(username) values(username);
return last_insert_id();
//
上述語句執行結束後則建立函式成功,然後我們再用delimiter ;把結束符改回來即可,而且並不影響之前建立的函式的使用 mysql自定義函式優點 MySQL自定義函式
在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...
mysql自定義函式命名 MySQL自定義函式
在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...
mysql 自定義函式
今天要做乙個排序,有中文和英文的,資料庫採用utf8編碼,排除來的不對,所以需要將中文轉換成中文的第乙個字母,然後來排序 先小小的看一下mysql的自定義函式 drop function if exists fntable 如果存在就刪除 delimiter 函式開始 create function...