MySQL - 函數(FUNCTION)


about

MySQL提供了豐富的內置函數自定義函數。

而我們也對這些函數有所了解,比如聚合函數。

本篇再來了解一些內置函數和自定義函數的編寫。

寫在前面的話:默認情況下,函數名稱和其后的括號之間必須沒有空格。這有助於MySQL解析器區分函數調用和對與函數名稱相同的表或列的引用。但是,函數參數周圍可以有空格。

內置函數

字符串相關

SELECT CONCAT('root','@','127.0.0.1');
SELECT CONCAT(USER,'@',HOST) FROM mysql.user;      -- 在合適的位置添加分隔符,較為靈活
SELECT CONCAT_WS('@',USER,HOST) FROM mysql.user;    -- 第一個參數為分隔符
SELECT USER,GROUP_CONCAT(HOST) FROM mysql.user GROUP BY USER;   -- 適用於分組,行轉列
SELECT CHAR_LENGTH('ABCD');    -- 返回字符串的長度
SELECT CHARACTER_LENGTH('ABCD');  -- 和 CHAR_LENGTH 的同義詞
SELECT LOWER('ABCD');    -- 以小寫形式返回字符串
SELECT UPPER('abcd');    -- 以大寫形式返回字符串, UPPER 是 UCASE 的同義詞
SELECT TRIM(' ABCD ');  -- 去除字符串兩邊的空格
SELECT BIN(12);  -- 返回十進制數字的二進制表示
SELECT OCT(12);  -- 返回十進制數字的八進制表示
SELECT HEX(12), HEX('ABCD');  -- 返回十進制數字或者字符串的十六進制的表示形式
SELECT UNHEX(HEX('ABCD'));  -- 返回被轉化為十六進制表示的原始數字或字符串

數值相關

SELECT ABS(123);    -- 返回數值的絕對值
SELECT 5 / 2,5 DIV 2;   -- 向下整除
SELECT TRUNCATE(1.1234,2),TRUNCATE(-1.1234,2);  -- 包括指定位數小數,數值可為負數
SELECT PI();    -- 返回6為小數的 Π 值
SELECT SQRT(2);  -- 返回參數的平方根

自定義函數

除了內置函數,MySQL還支持自定義函數。

創建

-- 創建一個函數,返回兩個整數之和
DELIMITER //
CREATE FUNCTION f1(
    n1 INT,
    n2 INT)   -- 創建函數 f1 參數可以是MySQL支持的那些類型
RETURNS INT  -- 該函數的返回值也是 int 類型
BEGIN    -- 標識函數體開始
    DECLARE num INT;    -- 定義一個int類型的變量
    SET num = n1 + n2;
    RETURN(num);

END //    -- 標識函數體結束
DELIMITER ;

另外,函數中不能有SELECT語句

執行

SELECT f1(1,1);

-- 在查詢中使用
CREATE TABLE t3(
n1 INT NOT NULL DEFAULT 0,
n2 INT NOT NULL DEFAULT 0
)ENGINE=INNODB CHARSET=utf8mb4;

INSERT INTO t3(n1,n2) VALUES(2,3),(3,4);

SELECT n1,n2,f1(n1,n2) AS '兩數相加' FROM t3;
+----+----+--------------+
| n1 | n2 | 兩數相加     |
+----+----+--------------+
|  2 |  3 |            5 |
|  3 |  4 |            7 |
+----+----+--------------+
2 rows in set (0.01 sec)

修改

ALTER FUNCTION 函數名 選項;

函數的修改只能修改一些如COMMENT的選項,不能修改內部的SQL語句和參數列表,所以直接刪了重建就完了。

查看

SHOW FUNCTION STATUS;   -- 返回所有自定義函數
SHOW FUNCTION STATUS LIKE 'f%'  -- 過濾
SHOW CREATE FUNCTION f1;  -- 返回自定義函數的創建信息
SHOW CREATE FUNCTION tt.f1;   -- 指定數據庫下的自定義函數

刪除

DROP FUNCTION f1;

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM