以下是 MySQL 常用字符串函數的分類匯總,包含語法示例及用途說明:
一、字符串連接與分割
CONCAT(str1, str2, ...)
- 用途:連接多個字符串。
- 示例:
SELECT CONCAT('Hello', ' ', 'World');
→Hello World
- 注意:若任一參數為
NULL
,結果返回NULL
。
CONCAT_WS(separator, str1, str2, ...)
- 用途:用指定分隔符連接字符串,自動忽略
NULL
。 - 示例:
SELECT CONCAT_WS('-', '2023', '10', NULL, '05');
→2023-10-05
- 用途:用指定分隔符連接字符串,自動忽略
GROUP_CONCAT([DISTINCT] expr [ORDER BY ...] [SEPARATOR sep])
- 用途:分組聚合時合並多行字符串。
- 示例:
SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM users;
→Alice, Bob, Charlie
二、字符串截取與長度
SUBSTRING(str, start, length)
或SUBSTR(str, start, length)
- 用途:截取子字符串,
start
從 1 開始。 - 示例:
SELECT SUBSTRING('MySQL', 3, 2);
→SQ
- 用途:截取子字符串,
LEFT(str, length)
和RIGHT(str, length)
- 用途:截取左/右側指定長度的字符串。
- 示例:
SELECT LEFT('Database', 4);
→Data
CHAR_LENGTH(str)
和LENGTH(str)
- 用途:字符數 vs 字節數(如 UTF-8 中漢字占 3 字節)。
- 示例:
SELECT CHAR_LENGTH('中文'), LENGTH('中文');
→2, 6
三、字符串轉換與格式化
UPPER(str)
和LOWER(str)
- 用途:轉換為大寫或小寫。
- 示例:
SELECT UPPER('Hello');
→HELLO
REVERSE(str)
- 用途:反轉字符串。
- 示例:
SELECT REVERSE('abc');
→cba
FORMAT(number, decimal_places)
- 用途:格式化數字為字符串(添加千位分隔符)。
- 示例:
SELECT FORMAT(1234567.89, 2);
→1,234,567.89
四、字符串搜索與替換
LOCATE(substr, str, [start])
或INSTR(str, substr)
- 用途:返回子字符串首次出現的位置(從 1 開始),未找到返回 0。
- 示例:
SELECT LOCATE('SQL', 'MySQL');
→3
REPLACE(str, from_str, to_str)
- 用途:替換所有匹配的子字符串。
- 示例:
SELECT REPLACE('Hello World', 'World', 'MySQL');
→Hello MySQL
INSERT(str, start, length, new_str)
- 用途:從
start
位置開始替換length
長度的字符為new_str
。 - 示例:
SELECT INSERT('ABCDE', 2, 3, '123');
→A123E
- 用途:從
五、字符串填充與修剪
LPAD(str, length, pad_str)
和RPAD(str, length, pad_str)
- 用途:左/右填充字符串到指定長度。
- 示例:
SELECT LPAD('7', 3, '0');
→007
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
- 用途:去除首尾空格或指定字符。
- 示例:
SELECT TRIM(LEADING '#' FROM '##MySQL##');
→MySQL##
六、其他實用函數
REPEAT(str, count)
- 用途:重複字符串指定次數。
- 示例:
SELECT REPEAT('Ha', 3);
→HaHaHa
SPACE(count)
- 用途:生成指定數量的空格字符串。
- 示例:
SELECT CONCAT('Hello', SPACE(3), 'World');
→Hello World
STRCMP(str1, str2)
- 用途:比較字符串(0=相等,-1=str1<str2,1=str1>str2)。
- 示例:
SELECT STRCMP('apple', 'banana');
→-1
注意事項
- NULL 處理:多數函數遇到
NULL
參數返回NULL
(如CONCAT(NULL, 'a')
→NULL
)。 - 索引起始:字符串位置參數通常從 1 開始(而非 0)。
- 字符集影響:多字節字符集(如 UTF-8)會影響
LENGTH()
結果。
通過靈活組合這些函數,可高效完成複雜字符串處理任務。建議結合具體場景測試函數行為以確保符合預期。