以下是 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()結果。
通過靈活組合這些函數,可高效完成複雜字符串處理任務。建議結合具體場景測試函數行為以確保符合預期。
