MySQL 內建函數速查與實用範例
MySQL 提供豐富的內建函數,涵蓋日期時間、字串、數學、加密、資訊查詢等類別。本文整理高頻使用的函數並附帶實戰範例,方便開發時快速查閱。
一、日期時間函數
| 函數 | 說明 | 範例 |
NOW() | 當前日期時間 (YYYY-MM-DD HH:MM:SS) | SELECT NOW(); |
SYSDATE() | 執行瞬間的日期時間(動態) | SELECT SYSDATE(); |
CURDATE() | 當前日期 | SELECT CURDATE(); |
CURTIME() | 當前時間 | SELECT CURTIME(); |
DATE_FORMAT(date, fmt) | 按格式輸出日期 | SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); |
DATE_ADD(date, INTERVAL expr unit) | 日期加減 | SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); |
DATEDIFF(date1, date2) | 兩日期相差天數 | SELECT DATEDIFF('2024-01-01', '2023-01-01'); |
LAST_DAY(date) | 該月最後一天 | SELECT LAST_DAY('2024-02-15'); |
二、字串函數
| 函數 | 說明 | 範例 |
CONCAT(str1, str2, ...) | 字串拼接 | SELECT CONCAT('Hello', ' ', 'World'); |
SUBSTRING(str, pos, len) | 截取子串 | SELECT SUBSTRING('abcdef', 2, 3); -- bcd |
TRIM(str) | 去除首尾空格 | SELECT TRIM(' abc '); |
REPLACE(str, from, to) | 替換字串 | SELECT REPLACE('a,b,c', ',', ';'); |
LENGTH(str) | 字串字節長度 | SELECT LENGTH('中文'); -- 6 (utf8mb4) |
CHAR_LENGTH(str) | 字串字符長度 | SELECT CHAR_LENGTH('中文'); -- 2 |
三、資訊查詢函數
SELECT DATABASE(); -- 當前資料庫
SELECT VERSION(); -- MySQL 版本
SELECT USER(); -- 當前連接用戶
SELECT CONNECTION_ID(); -- 連接線程 ID
四、條件與流程控制
-- IF
SELECT IF(score >= 60, '及格', '不及格') FROM exam;
-- CASE
SELECT CASE
WHEN score >= 90 THEN '優'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS grade FROM exam;
-- COALESCE 返回第一個非 NULL 值
SELECT COALESCE(NULL, NULL, 'default', 'other'); -- 'default'
-- NULLIF 兩值相等返回 NULL
SELECT NULLIF(5, 5); -- NULL
五、聚合與窗口函數 (MySQL 8.0+)
-- ROW_NUMBER() 為分組內排序產生序號
SELECT id, dept, salary,
ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC) AS rn
FROM employee;
參考資源
持續更新中… 歡迎補充常用函數場景。