以下是MySQL函數的全面總結,包含概念說明和代碼示例:
一、MySQL函數分類
1. 字符串函數
-- CONCAT:連接字符串
SELECT CONCAT('Hello', ' ', 'World');
-- 輸出 'Hello World'
-- SUBSTRING:截取子串
SELECT SUBSTRING('MySQL', 2, 3);
-- 輸出 'ySQ'
-- UPPER/LOWER:大小寫轉換
SELECT UPPER('mysql'), LOWER('SQL');
-- 輸出 'MYSQL', 'sql'
-- TRIM:去除首尾空格SELECT TRIM(' MySQL ');
-- 輸出 'MySQL'
-- REPLACE:替換字符串
SELECT REPLACE('Hello World', 'World', 'MySQL');
-- 輸出 'Hello MySQL'
2. 數值函數
-- ROUND:四舍五入
SELECT ROUND(3.1415, 2);
-- 輸出 3.14
-- ABS:絕對值
SELECT ABS(-15);
-- 輸出 15
-- MOD:取余
SELECT MOD(10, 3);
-- 輸出 1
-- CEIL/FLOOR:向上/向下取整
SELECT CEIL(2.3), FLOOR(2.7);
-- 輸出 3, 2
3. 日期時間函數
-- NOW:當前日期時間
SELECT NOW();
-- 輸出 '2023-10-25 14:30:00'
-- CURDATE/CURTIME:當前日期/時間
SELECT CURDATE(), CURTIME();
-- 輸出 '2023-10-25', '14:30:00'
-- DATE_FORMAT:格式化日期
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
-- 輸出 '2023-10-25'
-- DATEDIFF:日期差值
SELECT DATEDIFF('2023-10-31', '2023-10-25');
-- 輸出 6
4. 聚合函數
-- SUM/AVG:求和/平均值
SELECT SUM(salary), AVG(age) FROM employees;
-- COUNT:計數
SELECT COUNT(*) FROM orders WHERE status='completed';
-- MAX/MIN:最大/最小值SELECT MAX(price), MIN(quantity) FROM products;
5. 流程控制函數
-- IF:條件判斷
SELECT IF(score >= 60, 'Pass', 'Fail') AS result FROM exams;
-- CASE:多條件分支
SELECT CASE WHEN temperature > 30 THEN 'Hot' WHEN temperature > 20 THEN 'Warm' ELSE 'Cool' END AS weather FROM sensors;
6. 系統信息函數
-- VERSION:數據庫版本
SELECT VERSION();
-- USER:當前用戶
SELECT USER();
-- DATABASE:當前數據庫
SELECT DATABASE();
7. 加密函數
-- MD5:生成MD5哈希
SELECT MD5('password123');
-- SHA1:生成SHA1哈希
SELECT SHA1('secret');
二、函數使用注意事項
-
NULL處理:
- 多數函數遇到NULL參數會返回NULL
- 使用IFNULL處理NULL值
SELECT IFNULL(email, 'N/A') FROM users;
-
性能優化:
- 避免在WHERE子句中對字段使用函數(會導致索引失效)
-- 不推薦: SELECT * FROM logs WHERE DATE_FORMAT(created_at, '%Y-%m') = '2025-05'; -- 推薦: SELECT * FROM logs WHERE created_at BETWEEN '2023-10-01' AND '2025-05-31';
-
可移植性:
- MySQL特有函數(如DATE_FORMAT)在其他數據庫可能不兼容
三、綜合示例
-- 統計每月銷售總額(使用日期函數和聚合函數)
SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, SUM(amount) AS total_sales FROM orders GROUP BY month ORDER BY month; -- 用戶信息格式化(字符串函數嵌套)
SELECT CONCAT(UPPER(last_name), ', ', first_name) AS full_name, YEAR(birthdate) AS birth_year FROM users WHERE DATEDIFF(CURDATE(), birthdate)/365 > 18;
-- 篩選成年用戶
四、總結
MySQL函數體系提供了強大的數據處理能力,覆蓋字符串操作、數值計算、日期處理、邏輯控制等場景。使用時需注意:
- 合理選擇函數類型和參數
- 關注NULL值的處理邏輯
- 在性能敏感場景謹慎使用函數
- 注意不同數據庫系統的函數差異
掌握這些函數的使用方法,可以顯著提升SQL查詢的靈活性和數據處理效率。