本章聚焦單表查詢的核心技能:模糊匹配、字串處理、日期運算、數學計算與聚合統計,是編寫高品質 SELECT 語句的基本功。
%:匹配任意 0~n 字元;_:匹配任意單一字元;TRIM() 預處理。SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name; -- OR 邏輯 WHERE prod_name REGEXP '1000|2000'; -- 區分大小寫 WHERE prod_name REGEXP BINARY 'JetPack.000';
預設不區分大小寫,BINARY 關鍵字啟用區分。
| 函數 | 用途 | 範例 |
|---|---|---|
| CONCAT(s1,s2...) | 拼接字串 | CONCAT(vend_name,'(',vend_country,')') |
| RTRIM/LTRIM/TRIM | 去除右/左/兩側空格 | TRIM(' abc ') |
| LEFT(s,len)/RIGHT(s,len) | 取左/右 len 字元 | LEFT('hello',2) → 'he' |
| LENGTH(s) | 字串位元組長度 | |
| LOCATE(sub,str[,pos]) | 尋找子串位置(可指定起始位) | |
| LOWER/UPPER | 大小寫轉換 | |
| SUBSTRING(str,pos[,len]) | 擷取子串(位置從 1 起算) | |
| SOUNDEX(s) | 語音編碼,模糊匹配同音詞 | WHERE SOUNDEX(cust_contact)=SOUNDEX('Y Lie') |
| SPACE(n) | 產生 n 個空格 |
-- 算術運算符 + - * /
SELECT prod_id, quantity, item_price,
quantity * item_price AS expanded_price
FROM orderitems WHERE order_num = 20005;
-- 單獨測試函數(無需 FROM 表)
SELECT TRIM(' abc ');
SELECT NOW();
DATE()、TIME():擷取日期/時間部分;NOW():當前日期時間;| 函數 | 說明 |
|---|---|
| ABS(x) | 絕對值 |
| COS/SIN/TAN(x) | 三角函數(弧度) |
| EXP(x) | e^x |
| MOD(n,m) | 餘數 |
| PI() | 圓周率 |
| RAND([seed]) | 隨機數 |
| ROUND(x[,d]) | 四捨五入 |
| SQRT(x) | 平方根 |
| 函數 | 說明 |
|---|---|
| AVG(col) | 平均值(忽略 NULL) |
| COUNT(col/* ) | 行數(忽略 NULL / 含 NULL) |
| MAX/MIN(col) | 最大/最小值 |
| SUM(col) | 求和(忽略 NULL) |
搭配 DISTINCT 可去重聚合:AVG(DISTINCT price)。