函數的語法(標準模版)
阿新 • • 發佈:2017-06-17
con string reat sql 流程控制 font arch def ack 自定義函數 (user-defined function UDF)就是用一個象ABS() 或 CONCAT()這樣的固有(內建)函數一樣作用的新函數去擴展MySQL,所以UDF是對MySQL功能的一個擴展
創建和刪除自定義函數語法:
簡單來說就是:
CREATE FUNCTION 函數名稱(參數列表)
RETURNS 返回值類型
函數體
DROP FUNCTION function_name
SELECT function_name(parameter_value,...)
舉幾個例子
說明:
UDF可以實現的功能不止於此,UDF有兩個關鍵點,一個是參數,一個是返回值,UDF可以沒有參數,但UDF必須有且只有一個返回值
在函數體重我們可以使用更為復雜的語法,比如復合結構/流程控制/任何SQL語句/定義變量等等
這個函數把‘2009-06-23 00:00:00‘轉換為一個特定的字符串
這個函數截取字符串
函數的模版
創建和刪除自定義函數語法:
創建UDF:
CREATE [AGGREGATE] FUNCTION function_name(parameter_name type,[parameter_name type,...])
RETURNS {STRING|INTEGER|REAL}
runtime_body
簡單來說就是:
CREATE FUNCTION 函數名稱(參數列表)
RETURNS 返回值類型
函數體
刪除UDF:
DROP FUNCTION function_name
調用自定義函數語法:
SELECT function_name(parameter_value,...)
舉幾個例子
例子1
簡單的函數使用函數
CREATE FUNCTION simpleFun() RETURNS VARCHAR(20)
BEGIN
RETURN "Hello World!";
end;
select simpleFun();
說明:
UDF可以實現的功能不止於此,UDF有兩個關鍵點,一個是參數,一個是返回值,UDF可以沒有參數,但UDF必須有且只有一個返回值
例子2
這裏我們是單步執行的,所以,我們可以不定義DELIMITER,DELIMITER的意思是定義默認的結束符號!DELIMITER // 意思是修改默認的結束符";"為"//",以後的SQL語句都要以"//"作為結尾
CREATE TABLE son (
id INT NOT NULL
,name VARCHAR(20),
pay INTEGER
);
INSERT INTO son (id, name, pay) VALUES (1,‘bol‘,20);
INSERT INTO son (id, name, pay) VALUES (2,‘davie‘,2220);
SELECT * FROM son;
DROP FUNCTION IF EXISTS deleteById;
CREATE FUNCTION deleteById(uid SMALLINT UNSIGNED)
RETURNS VARCHAR(20)
BEGIN
DELETE FROM son WHERE id = uid;
RETURN
(SELECT COUNT(id) FROM son);END
select deleteById(2);
在函數體重我們可以使用更為復雜的語法,比如復合結構/流程控制/任何SQL語句/定義變量等等
這個函數把‘2009-06-23 00:00:00‘轉換為一個特定的字符串
DELIMITER $$
DROP FUNCTION IF EXISTS `test`;
CREATE FUNCTION `test`(gdate datetime) RETURNS varchar(255)
BEGIN
DECLARE x VARCHAR(255) DEFAULT ‘‘;
SET x= date_format(gdate,‘%Y%m%d%h%i%s‘);
RETURN x;
END $$
DELIMITER ;
SELECT test(‘2009-06-23 00:00:00‘)
這個函數截取字符串
DELIMITER $$
DROP FUNCTION IF EXISTS cutString ;
CREATE FUNCTION cutString(s VARCHAR(255),n INT) RETURNS varchar(255)
BEGIN
IF(ISNULL(s)) THEN RETURN ‘‘;
ELSEIF
CHAR_LENGTH(s)<n THEN- RETURN s;
ELSEIF
CHAR_LENGTH(S)=n THEN- RETURN ‘相等‘;
ELSE
RETURN CONCAT(LEFT(s,n),‘...‘);
END IF;
END $$
DELIMITER ;
SELECT cutString(‘323432234‘,4);
函數的模版
函數的語法(標準模版)