所有字符串函數均為「只讀計算」,返回新值,不修改原表數據。持久化需配合UPDATE語句。
| 分類 | 函數 | 語法 | 示例 | 結果 | 說明 |
|---|---|---|---|---|---|
| 截取 | LEFT | LEFT(str, len) | LEFT('nihao', 2) | ni | 左側起取len字符 |
| RIGHT | RIGHT(str, len) | RIGHT('nihao', 3) | hao | 右側起取len字符 | |
| 分隔符截取 | SUBSTRING_INDEX | SUBSTRING_INDEX(str, delim, count) | SUBSTRING_INDEX('HH,MM,SS', ',', 2) | HH,MM | count>0:左側第count個分隔符前;<0:右側 |
| SUBSTRING | SUBSTRING(str, pos, len) | SUBSTRING('helloworld', 1, 5) | hello | pos從1開始,len可省略(到末尾) | |
| 大小寫 | UPPER / UCASE | UPPER(str) | UPPER('hello') | HELLO | 轉大寫 |
| LOWER / LCASE | LOWER(str) | LOWER('HELLO') | hello | 轉小寫 | |
| 反轉 | REVERSE | REVERSE(str) | REVERSE('hello') | olleh | 字符序列反轉 |
| 去空格 | LTRIM | LTRIM(str) | LTRIM(' hello ') | 'hello ' | 去左側空格 |
| RTRIM | RTRIM(str) | RTRIM(' hello ') | ' hello' | 去右側空格 | |
| TRIM | TRIM([BOTH|LEADING|TRAILING] [remstr] FROM str) | TRIM(' hello ') | 'hello' | 默認去兩側空格,可指定字符 | |
| 長度 | LENGTH | LENGTH(str) | LENGTH('helo') | 4 | 字節長度;CHAR_LENGTH為字符長度 |
SELECT
TRIM(LOWER(REVERSE(TRIM(UPPER(' AbC '))))) AS cleaned;
-- 執行順序:UPPER→TRIM→REVERSE→LOWER→TRIM
-- 截取@前的用戶名
SELECT SUBSTRING_INDEX(email, '@', 1) AS username FROM users;
-- 截取最後一個/後的路徑
SELECT SUBSTRING_INDEX(path, '/', -1) AS filename FROM files;
SELECT
LENGTH('中文') AS byte_len, -- 6 (utf8mb4: 3字節/字符)
CHAR_LENGTH('中文') AS char_len; -- 2
建議:業務邏輯用CHAR_LENGTH,存儲/傳輸限制用LENGTH。
字符串函數是數據清洗、報表格式化、異構系統集成的瑞士軍刀,熟練組合拼湊,配合EXPLAIN驗證索引使用,寫出高性能ETL SQL。