首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 字符串函數大全:27 個核心函數詳細解析與示例

     編輯:MySQL 資料庫相關知識

字符串函數分類速查

分類函數
編碼/轉換ASCII, ORD, CONV, BIN, OCT, HEX, CHAR
連接/拼接CONCAT, CONCAT_WS
長度計算LENGTH/OCTET_LENGTH, CHAR_LENGTH/CHARACTER_LENGTH
查找/定位LOCATE, POSITION, INSTR
填充/截取LPAD, RPAD, LEFT, RIGHT, SUBSTRING, MID, SUBSTRING_INDEX
去除空格TRIM, LTRIM, RTRIM
重複/反轉SPACE, REPEAT, REVERSE
替換/插入REPLACE, INSERT
集合/查找ELT, FIELD, FIND_IN_SET, MAKE_SET, EXPORT_SET
大小寫轉換LOWER/LCASE, UPPER/UCASE
文件讀取LOAD_FILE

核心函數詳細示例

1. 編碼與進制轉換

SELECT ASCII('A');        -- 65
SELECT ORD('中');         -- 中文字符編碼值
SELECT CONV('FF', 16, 10); -- 255 (十六進制轉十進制)
SELECT BIN(10);           -- '1010' (二進制)
SELECT OCT(10);           -- '12' (八進制)
SELECT HEX(255);          -- 'FF' (十六進制)
SELECT CHAR(77,121,83,81,76); -- 'MySQL'

2. 字符串連接

SELECT CONCAT('My', 'S', 'QL');           -- 'MySQL'
SELECT CONCAT('My', NULL, 'QL');          -- NULL (任一參數為NULL結果為NULL)
SELECT CONCAT_WS(';', 'id', 'name', 'age'); -- 'id;name;age' (帶分隔符)

3. 長度計算(字節 vs 字符)

SELECT LENGTH('中文');        -- 6 (UTF-8下每字3字節)
SELECT CHAR_LENGTH('中文');   -- 2 (字符數)

4. 子串查找與定位

SELECT LOCATE('sql', 'MySQL');        -- 3
SELECT LOCATE('sql', 'MySQL', 4);     -- 0 (從第4位開始找不到)
SELECT INSTR('MySQL', 'sql');         -- 3 (同 LOCATE 參數順序相反)

5. 截取與填充

SELECT LEFT('MySQL', 2);        -- 'My'
SELECT RIGHT('MySQL', 3);       -- 'SQL'
SELECT SUBSTRING('MySQL', 3, 2); -- 'SQ' (從第3位取2字符)
SELECT LPAD('5', 3, '0');       -- '005' (左填充)
SELECT RPAD('5', 3, '0');       -- '500' (右填充)

6. SUBSTRING_INDEX 實用技巧

SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);   -- 'www.mysql' (從左數第2個分隔符前)
SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);  -- 'mysql.com' (從右數第2個分隔符後)

7. 去除空格/字符

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'

8. 替換與插入

SELECT REPLACE('www.mysql.com', 'w', 'Ww'); -- 'WwWwWw.mysql.com'
SELECT INSERT('Quadratic', 3, 4, 'What');   -- 'QuWhattic' (第3位起4字符替換為'What')

9. 集合操作函數

SELECT ELT(2, 'a', 'b', 'c');           -- 'b' (返回第N個參數)
SELECT FIELD('b', 'a', 'b', 'c');       -- 2 (返回值在列表中的位置)
SELECT FIND_IN_SET('b', 'a,b,c');       -- 2 (在逗號分隔字符串中查找)
SELECT MAKE_SET(5, 'a', 'b', 'c');      -- 'a,c' (二進制101對應第0,2位)
SELECT EXPORT_SET(5, 'Y', 'N', ',', 3); -- 'Y,N,Y' (位掩碼導出集合)

10. 大小寫轉換

SELECT LOWER('MySQL');  -- 'mysql'
SELECT UPPER('mysql');  -- 'MYSQL'

11. 文件讀取

SELECT LOAD_FILE('/etc/passwd'); -- 需FILE權限,文件需在服務器上且小於max_allowed_packet

實戰常用組合

  • 生成固定長度代碼:LPAD(id, 8, '0') → '00000123'
  • 解析 URL 域名:SUBSTRING_INDEX(SUBSTRING_INDEX(url, '//', -1), '/', 1)
  • 標籤字符串去重:REPLACE(TRIM(BOTH ',' FROM tags), ',,', ',')
  • 掩碼手機號:CONCAT(LEFT(phone, 3), '****', RIGHT(phone, 4))

性能提示

  • LENGTH 計算字節長度,CHAR_LENGTH 計算字符長度,WHERE 條件中優先用後者利用字符級索引。
  • CONCAT 參數含 NULL 導致整體為 NULL,拼接可能為空的列請用 COALESCE(col, '') 或 CONCAT_WS。
  • SUBSTRING_INDEX 解析分隔符字符串比 SUBSTRING + LOCATE 組合更簡潔高效。

掌握這 27 個字符串函數,覆蓋 95% 以上的文本處理場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved