MySQL 核心函數與運算符實戰速查(優化整理版)
一、字串處理函數
| 函數 | 用途 | 範例 | 結果 |
| CONCAT(s1,s2...) | 連接字串 | CONCAT('imooc','-','MySQL') | imooc-MySQL |
| CONCAT_WS(sep,s1,s2...) | 分隔符連接 | CONCAT_WS('-',id,name) | 1-Tom |
| FORMAT(num,dec) | 千分位格式化 | FORMAT(234234.234,2) | 234,234.23 |
| UPPER/LOWER(str) | 大小寫轉換 | UPPER(LEFT('andy',1)) | A |
| LEFT/RIGHT(str,n) | 取左/右 n 字元 | LEFT('MySQL',2) | My |
| LENGTH(str) | 位元組長度 | LENGTH('中文') | 6 (UTF-8) |
| TRIM([BOTH|LEADING|TRAILING] c FROM s) | 去除字元 | TRIM(BOTH '!' FROM '!!A!!') | A |
| REPLACE(s,old,new) | 替換 | REPLACE('a!b','!','-') | a-b |
| SUBSTRING(s,pos,len) | 子字串(1-based) | SUBSTRING('MySQL',1,2) | My |
二、模式匹配
% 任意長度,_ 單一字元
'mysql' LIKE 'M%' → 1 (不區分大小寫)
username LIKE '%m%' 包含 m 的記錄
三、數值函數
| 函數 | 說明 | 範例 |
| CEIL(x) | 向上取整 | CEIL(1.2)=2 |
| FLOOR(x) | 向下取整 | FLOOR(1.8)=1 |
| DIV / MOD | 整除 / 餘數 | 10 DIV 3=3, 10 MOD 3=1 |
| POWER(x,y) | 冪運算 | POWER(2,3)=8 |
| ROUND(x,d) | 四捨五入 | ROUND(1.234,2)=1.23 |
| TRUNCATE(x,d) | 截斷 | TRUNCATE(1.239,2)=1.23 |
四、比較運算符
BETWEEN a AND b:包含邊界
IN (v1,v2...) / NOT IN
IS NULL / IS NOT NULL —— 永遠不要用 = NULL
五、日期時間函數
| 函數 | 說明 | 範例 |
| NOW() | 當前日期時間 | 2024-01-15 10:30:00 |
| CURDATE()/CURTIME() | 當前日期/時間 | |
| DATE_ADD(d, INTERVAL n UNIT) | 日期運算 | DATE_ADD('2024-01-01', INTERVAL 30 DAY) |
| DATEDIFF(d1,d2) | 天數差 | DATEDIFF('2024-02-01','2024-01-01')=31 |
| DATE_FORMAT(d, fmt) | 格式化 | DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') |
格式符:%Y年 %m月 %d日 %H24時 %i分 %s秒
六、資訊函數
USER()、VERSION()、DATABASE()、CONNECTION_ID()、LAST_INSERT_ID()
七、聚合函數
AVG()、COUNT()、MAX()、MIN()、SUM() —— 單值回傳,針對欄位運算
八、加密函數
MD5(str):32 位十六進位,應用層常用
PASSWORD(str):MySQL 內部認證,**應用層勿用**
九、巢狀與組合技巧
-- 去除前後空格再大寫
UPPER(TRIM(name))
-- 日期格式化並取年份
YEAR(DATE_FORMAT(created_at, '%Y-%m-%d'))
-- 條件聚合
SUM(CASE WHEN status=1 THEN amount ELSE 0 END)