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

MySQL字符串函數實戰速查:截取/大小寫/反轉/去空格/長度計算 核心函數與只讀特性解析

     編輯:MySQL 資料庫相關知識

核心原則

所有字符串函數均為「只讀計算」,返回新值,不修改原表數據。持久化需配合UPDATE語句。

函數分類速查表

分類函數語法示例結果說明
截取LEFTLEFT(str, len)LEFT('nihao', 2)ni左側起取len字符
RIGHTRIGHT(str, len)RIGHT('nihao', 3)hao右側起取len字符
分隔符截取SUBSTRING_INDEXSUBSTRING_INDEX(str, delim, count)SUBSTRING_INDEX('HH,MM,SS', ',', 2)HH,MMcount>0:左側第count個分隔符前;<0:右側
SUBSTRINGSUBSTRING(str, pos, len)SUBSTRING('helloworld', 1, 5)hellopos從1開始,len可省略(到末尾)
大小寫UPPER / UCASEUPPER(str)UPPER('hello')HELLO轉大寫
LOWER / LCASELOWER(str)LOWER('HELLO')hello轉小寫
反轉REVERSEREVERSE(str)REVERSE('hello')olleh字符序列反轉
去空格LTRIMLTRIM(str)LTRIM(' hello ')'hello '去左側空格
RTRIMRTRIM(str)RTRIM(' hello ')' hello'去右側空格
TRIMTRIM([BOTH|LEADING|TRAILING] [remstr] FROM str)TRIM(' hello ')'hello'默認去兩側空格,可指定字符
長度LENGTHLENGTH(str)LENGTH('helo')4字節長度;CHAR_LENGTH為字符長度

進階組合技巧

標準化清洗管道

SELECT 
    TRIM(LOWER(REVERSE(TRIM(UPPER('  AbC  '))))) AS cleaned;
-- 執行順序:UPPER→TRIM→REVERSE→LOWER→TRIM

動態截取(配合LOCATE/INSTR)

-- 截取@前的用戶名
SELECT SUBSTRING_INDEX(email, '@', 1) AS username FROM users;

-- 截取最後一個/後的路徑
SELECT SUBSTRING_INDEX(path, '/', -1) AS filename FROM files;

長度區分:字節 vs 字符

SELECT 
    LENGTH('中文') AS byte_len,      -- 6 (utf8mb4: 3字節/字符)
    CHAR_LENGTH('中文') AS char_len; -- 2

建議:業務邏輯用CHAR_LENGTH,存儲/傳輸限制用LENGTH。

性能與索引考量

  • 函數列不可用索引:`WHERE UPPER(name)='ABC'` → 全表掃描
  • 改寫策略:`WHERE name='abc' COLLATE utf8mb4_general_ci`(大小寫不敏感校對規則)或函數索引(8.0+)
  • 虛擬列索引:`ADD COLUMN name_upper VARCHAR(20) GENERATED ALWAYS AS (UPPER(name)), ADD INDEX(name_upper)`

字符串函數是數據清洗、報表格式化、異構系統集成的瑞士軍刀,熟練組合拼湊,配合EXPLAIN驗證索引使用,寫出高性能ETL SQL。

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