一、字符串函數
| 函數 | 說明 | 範例 |
CONCAT(s1,s2...) | 拼接字串,任一參數為 NULL 則回傳 NULL | CONCAT('My','SQL') → 'MySQL' |
CONCAT_WS(sep,s1,s2...) | 帶分隔符拼接,自動跳過 NULL | CONCAT_WS(',','a',NULL,'c') → 'a,c' |
LENGTH(str) | 字節長度 | LENGTH('中文') → 6 (utf8) |
CHAR_LENGTH(str) | 字符長度 | CHAR_LENGTH('中文') → 2 |
SUBSTRING(str,pos,len) | 截取子串,支援負數位置 | SUBSTRING('abcdef',2,3) → 'bcd' |
LOCATE(sub,str) | 查找子串首次出現位置 | LOCATE('bar','foobarbar') → 4 |
REPLACE(str,from,to) | 替換所有匹配 | REPLACE('www.mysql.com','w','Ww') → 'WwWwWw.mysql.com' |
TRIM([BOTH|LEADING|TRAILING] rem FROM str) | 去除首尾指定字符,預設去空格 | TRIM(' bar ') → 'bar' |
UPPER/LOWER(str) | 大小寫轉換 | UPPER('mysql') → 'MYSQL' |
GROUP_CONCAT(expr) | 分組拼接,見專文 | - |
二、數學函數
| 函數 | 說明 |
ABS(x) | 絕對值 |
CEIL/FLOOR(x) | 向上/向下取整 |
ROUND(x,d) | 四捨五入保留 d 位小數 |
TRUNCATE(x,d) | 直接截斷保留 d 位 |
MOD(n,m) | 取模,等同 n % m |
POW(x,y) | x 的 y 次方 |
SQRT(x) | 平方根 |
RAND([seed]) | 0~1 隨機數,種子固定則序列固定 |
LEAST/GREATEST(v1,v2...) | 最小/最大值 |
三、日期時間函數
| 函數 | 說明 |
NOW()/SYSDATE() | 當前日期時間 |
CURDATE()/CURTIME() | 當前日期/時間 |
DATE_ADD(date, INTERVAL expr unit) | 日期加減,unit 可為 SECOND/MINUTE/HOUR/DAY/MONTH/YEAR 等 |
DATEDIFF(d1,d2) | 兩日期相差天數 |
DATE_FORMAT(date, fmt) | 格式化輸出,%Y-%m-%d %H:%i:%s |
STR_TO_DATE(str, fmt) | 字串解析為日期,格式化輸入 |
UNIX_TIMESTAMP([date]) | 轉 Unix 時間戳 |
FROM_UNIXTIME(ts, [fmt]) | 時間戳轉日期字串 |
LAST_DAY(date) | 該月最後一天 |
QUARTER(date) | 季度 1~4 |
四、類型轉換函數
CAST(expr AS type) -- 標準 SQL
CONVERT(expr, type) -- MySQL 擴展,亦可用於字符集轉換
-- 常見用法
SELECT CAST('123' AS UNSIGNED); -- 字串轉無符號整數
SELECT CONVERT('abc' USING utf8mb4); -- 字符集轉換
五、條件/流程控制
IF(cond, true_val, false_val)
CASE WHEN cond1 THEN v1 WHEN cond2 THEN v2 ELSE v3 END
COALESCE(v1,v2,...) -- 返回第一個非 NULL
NULLIF(v1,v2) -- 相等返回 NULL,否則返回 v1
六、資訊函數
VERSION() -- 版本號
CONNECTION_ID() -- 當前連接 ID
DATABASE() -- 當前資料庫
USER()/CURRENT_USER() -- 當前用戶
FOUND_ROWS() -- 上一條 SELECT SQL_CALC_FOUND_ROWS 滿足條件總行數
ROW_COUNT() -- 最後一條 INSERT/UPDATE/DELETE 影響行數
本表覆蓋 90% 日常開發場景,複雜邏輯請查閱官方文檔 https://dev.mysql.com/doc/refman/8.0/en/functions.html。