MySQL 提供豐富的內置函數,可直接在 SELECT、WHERE、ORDER BY、HAVING、UPDATE、DELETE 中使用。本文按類別整理高頻函數,附帶語法、參數說明與實戰示例,適合開發與運維隨時查閱。
| 函數 | 語法與說明 | 示例 |
|---|---|---|
| 拼接 | CONCAT(s1,s2,...,sn) 任一參數為 NULL 則結果為 NULL | SELECT CONCAT('abc','def'); -- abcdef |
| 替換指定區間 | INSERT(str, pos, len, newstr) 從 pos 起 len 字符替換為 newstr | SELECT INSERT('abcdef',2,3,'123'); -- a123ef |
| 大小寫轉換 | LOWER(str) / UPPER(str) | SELECT LOWER('HELLO'), UPPER('hello'); |
| 左右截取 | LEFT(str,n) / RIGHT(str,n) n≤0 返回空串 | SELECT LEFT('123456',3), RIGHT('123456',3); -- 123, 456 |
| 填充 | LPAD(str,len,pad) / RPAD(str,len,pad) 不足 len 則填充 | SELECT LPAD('hi',5,'#'), RPAD('hi',5,'@'); -- ###hi, hi@@@ |
| 去空格 | TRIM(str) / LTRIM(str) / RTRIM(str) | SELECT CONCAT('#',TRIM(' abc '),'#'); -- #abc# |
| 全量替換 | REPLACE(str, from_str, to_str) | SELECT REPLACE('abcabc','ab','XY'); -- XYcXYc |
| 比較 | STRCMP(s1,s2) 返回 -1/0/1 | SELECT STRCMP('aa','bb'); -- -1 |
| 子串 | SUBSTRING(str, pos, len) 位置從 1 開始 | SELECT SUBSTRING('abcdef',2,3); -- bcd |
| 函數 | 說明 | 示例 |
|---|---|---|
ABS(x) | 絕對值 | SELECT ABS(-10); -- 10 |
CEIL(x) / CEILING(x) | 向上取整(≥x 的最小整數) | SELECT CEIL(2.1); -- 3 |
FLOOR(x) | 向下取整(≤x 的最大整數) | SELECT FLOOR(2.9); -- 2 |
MOD(x,y) | 取模,等同 x % y | SELECT MOD(10,3); -- 1 |
RAND() | 0~1 隨機浮點數 | SELECT FLOOR(RAND()*100); -- 0~99 整數 |
ROUND(n,d) | 四捨五入保留 d 位小數 | SELECT ROUND(1.456,2); -- 1.46 |
TRUNCATE(n,d) | 直接截斷保留 d 位(不四捨五入) | SELECT TRUNCATE(1.235,2); -- 1.23 |
| 函數 | 說明 | 示例 |
|---|---|---|
CURDATE() | 當前日期 | SELECT CURDATE(); -- 2024-05-20 |
CURTIME() | 當前時間 | SELECT CURTIME(); -- 14:30:00 |
NOW() | 當前日期時間 | SELECT NOW(); -- 2024-05-20 14:30:00 |
UNIX_TIMESTAMP(dt) | 日期時間轉 Unix 時間戳(秒) | SELECT UNIX_TIMESTAMP('2024-05-20 14:30:00'); |
FROM_UNIXTIME(ts) | 時間戳轉日期時間字串 | SELECT FROM_UNIXTIME(1716263400); |
YEAR/MONTH/DAY/HOUR/MINUTE/SECOND(dt) | 提取對應部分 | SELECT MONTH(NOW()); |
WEEK(dt) | 年中的週數 | SELECT WEEK(NOW()); |
MONTHNAME(dt) | 月份英文名 | SELECT MONTHNAME(NOW()); -- May |
DATE_FORMAT(dt, fmt) | 自定義格式化,常用佔位符:%Y年 %m月 %d日 %H時 %i分 %s秒 | SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'); |
| 函數 | 語法 | 示例 |
|---|---|---|
IF | IF(expr, true_val, false_val) | SELECT IF(score>60,'Pass','Fail') FROM exam; |
IFNULL | IFNULL(expr1, expr2) expr1 非 NULL 返回 expr1 否則 expr2 | SELECT IFNULL(bonus,0) FROM salary; |
CASE | CASE WHEN cond1 THEN v1 ... ELSE v_def END | SELECT CASE WHEN age<18 THEN 'Child' ELSE 'Adult' END FROM users; |
| 函數 | 說明 | 示例 |
|---|---|---|
DATABASE() | 當前默認數據庫 | SELECT DATABASE(); |
VERSION() | 服務器版本 | SELECT VERSION(); |
USER() | 當前登錄用戶 | SELECT USER(); |
INET_ATON(ip) | IPv4 轉無符號整數 | SELECT INET_ATON('192.168.1.1'); -- 3232235777 |
INET_NTOA(num) | 整數轉 IPv4 字串 | SELECT INET_NTOA(3232235777); -- 192.168.1.1 |
PASSWORD(str) | MySQL 內部認證加密(僅供系統用戶,5.7+ 已移除) | SELECT PASSWORD('123'); |
MD5(str) | 應用層常用摘要 | SELECT MD5('123456'); |
mysql> ? substring
mysql> HELP 'date_format'
直接在客戶端輸入 ? 函數名 即可閱讀官方手冊片段。