字串函數分類速覽
| 類別 | 代表函數 |
| 大小寫轉換 | LOWER, UPPER, LCASE, UCASE |
| 子串擷取 | SUBSTRING, LEFT, RIGHT, MID, SUBSTRING_INDEX |
| 查找定位 | LOCATE, INSTR, POSITION, FIND_IN_SET |
| 替換修改 | REPLACE, INSERT, REVERSE |
| 去除空白 | TRIM, LTRIM, RTRIM |
| 長度計算 | LENGTH, CHAR_LENGTH, BIT_LENGTH, OCTET_LENGTH |
| 拼接合併 | CONCAT, CONCAT_WS |
| 格式化 | FORMAT, HEX, UNHEX, QUOTE |
| 編碼轉換 | ASCII, ORD, CHAR, CONV, BIN, OCT |
| 壓縮解壓 | COMPRESS, UNCOMPRESS, UNCOMPRESSED_LENGTH |
| 音演算法 | SOUNDEX, SOUNDS LIKE |
| 集合操作 | ELT, FIELD, MAKE_SET, EXPORT_SET |
| 其他 | REPEAT, SPACE, LOAD_FILE |
高頻函數詳細說明與範例
CONCAT / CONCAT_WS
SELECT CONCAT('My', 'S', 'QL'); -- 'MySQL'
SELECT CONCAT('My', NULL, 'QL'); -- NULL (任一參數為 NULL 結果為 NULL)
SELECT CONCAT_WS(',', 'A', 'B', 'C'); -- 'A,B,C'
SELECT CONCAT_WS(',', 'A', NULL, 'C'); -- 'A,C' (忽略 NULL)
SUBSTRING 靈活擷取
SELECT SUBSTRING('Quadratically', 5); -- 'ratically'
SELECT SUBSTRING('Quadratically', 5, 6); -- 'ratica'
SELECT SUBSTRING('Sakila', -3); -- 'ila' (負數從右計)
SELECT SUBSTRING('Sakila', -5, 3); -- 'aki'
REPLACE 全域替換
SELECT REPLACE('www.mysql.com', 'w', 'Ww'); -- 'WwWwWw.mysql.com'
TRIM 多模式去空白
SELECT TRIM(' bar '); -- 'bar'
SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -- 'barxxx'
SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -- 'bar'
SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -- 'barx'
SUBSTRING_INDEX 分隔符擷取
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); -- 'www.mysql'
SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); -- 'mysql.com'
FORMAT 數字格式化
SELECT FORMAT(1234567.89, 2); -- '1,234,567.89'
HEX / UNHEX 十六進制互轉
SELECT HEX('abc'); -- '616263'
SELECT UNHEX('616263'); -- 'abc'
COMPRESS / UNCOMPRESS 壓縮 (需 zlib 支援)
SELECT LENGTH(COMPRESS(REPEAT('a', 1000))); -- 21
SELECT UNCOMPRESS(COMPRESS('any string')); -- 'any string'
重要注意事項
- 位置參數從 1 開始,非 0。
- 多字節字元下
CHAR_LENGTH 計字元數,LENGTH 計位元組數。
CONCAT 遇 NULL 則全為 NULL,建議搭配 IFNULL 或 COALESCE。
LOAD_FILE 需 FILE 權限且檔案在 Server 端,受 max_allowed_packet 限制。
- 音演算法
SOUNDEX 僅適用英文,中文需用全文檢索或第三方擴展。
效能建議
- 避免在 WHERE 條件對欄位使用函數,導致索引失效。
- 大量字串拼接改用應用層處理或
GROUP_CONCAT。
- 定長字串操作優於變長,減少記憶體碎片。