《MySQL必知必會》第10-11章:函數處理數據全攻略(字符串、日期、聚合)
系統梳理 MySQL 內建函數:拼接、去空白、算術、字符串、日期時間、聚合函數,實現「資料庫端格式化、計算、統計」,減輕應用層壓力。
一、拼接字段 CONCAT()
| 函數 | 作用 |
LTRIM() | 去左側空格 |
RTRIM() | 去右側空格 |
TRIM() | 去兩側空格 |
三、算術計算
| 函數 | 說明 | 示例 |
LEFT(str, n) | 左側 n 字符 | LEFT('hello',2)='he' |
RIGHT(str, n) | 右側 n 字符 | RIGHT('hello',2)='lo' |
LENGTH(str) | 字節長度 | LENGTH('中文')=6 (utf8) |
CHAR_LENGTH(str) | 字符長度 | CHAR_LENGTH('中文')=2 |
LOCATE(sub, str) | 子串首次位置(1-based) | LOCATE('l','hello')=3 |
LOWER()/UPPER() | 大小寫轉換 | UPPER('abc')='ABC' |
SUBSTRING(str, pos, len) | 截取子串 | SUBSTRING('hello',2,3)='ell' |
SOUNDEX(str) | 語音編碼(英文名匹配) | SOUNDEX('Smith')=SOUNDEX('Smythe') |
五、日期時間函數核心表
| 函數 | 說明 | 示例 |
NOW() | 當前日期時間 | 2024-01-15 14:30:00 |
CURDATE() | 當前日期 | 2024-01-15 |
CURTIME() | 當前時間 | 14:30:00 |
DATE(dt) | 提取日期部分 | DATE('2024-01-15 14:30:00')='2024-01-15' |
YEAR()/MONTH()/DAY() | 提取年/月/日 | YEAR(NOW())=2024 |
HOUR()/MINUTE()/SECOND() | 提取時/分/秒 | |
DATE_ADD(dt, INTERVAL n UNIT) | 日期加減(靈活) | DATE_ADD(NOW(), INTERVAL 1 DAY) |
DATEDIFF(dt1, dt2) | 兩日期差(天) | DATEDIFF('2024-01-15','2024-01-01')=14 |
DATE_FORMAT(dt, fmt) | 格式化輸出 | DATE_FORMAT(NOW(),'%Y-%m-%d') |
日期查詢避坑指南
-- 錯誤:datetime 欄位直接比較日期字符串(含時間部分會失配)
WHERE order_date = '2005-09-01'
-- 正確:提取日期部分比較
WHERE DATE(order_date) = '2005-09-01'
-- 某年某月所有訂單
WHERE YEAR(order_date) = 2005 AND MONTH(order_date) = 9
六、聚合函數
| 函數 | 說明 | 忽略 NULL |
AVG(col) | 平均值 | 是 |
COUNT(*) | 行數(含 NULL) | 否 |
COUNT(col) | 非 NULL 行數 | 是 |
MAX(col) | 最大值 | 是 |
MIN(col) | 最小值 | 是 |
SUM(col) | 求和 | 是 |
實戰範例