MySQL?字符串截取函數(shù)及用法詳解
MySQL 字符串截取函數(shù)詳解
在 MySQL 中,字符串截取是常見的操作,主要用于從字符串中提取特定部分。MySQL 提供了多種函數(shù)來實現(xiàn)這一功能,包括 LEFT()、RIGHT()、SUBSTRING()、MID()、SUBSTR() 和 SUBSTRING_INDEX() 等。本文將詳細(xì)介紹這些函數(shù)的用法,并通過示例進(jìn)行說明。
LEFT(str, length):從左側(cè)截取指定長度的字符
功能:從字符串 str 的左側(cè)開始,截取 length 個字符。
語法:
LEFT(str, length)
示例:
SELECT LEFT('sqlstudy.com', 3);結(jié)果:
+-------------------------+
| LEFT('sqlstudy.com', 3) |
+-------------------------+
| sql |
+-------------------------+
解釋:從 'sqlstudy.com' 的左側(cè)開始,截取 3 個字符,結(jié)果為 'sql'。
RIGHT(str, length):從右側(cè)截取指定長度的字符
功能:從字符串 str 的右側(cè)開始,截取 length 個字符。
語法:
RIGHT(str, length)
示例:
SELECT RIGHT('sqlstudy.com', 3);結(jié)果:
+--------------------------+
| RIGHT('sqlstudy.com', 3) |
+--------------------------+
| com |
+--------------------------+
解釋:從 'sqlstudy.com' 的右側(cè)開始,截取 3 個字符,結(jié)果為 'com'。
SUBSTRING(str, pos) 或 SUBSTRING(str, pos, len):從指定位置開始截取
功能:從字符串 str 的第 pos 個字符開始,截取 len 個字符。pos 可以是正數(shù)或負(fù)數(shù),正數(shù)表示從左側(cè)開始,負(fù)數(shù)表示從右側(cè)開始。
語法:
SUBSTRING(str, pos) SUBSTRING(str, pos, len)
示例:
-- 從第 4 個字符開始,直到結(jié)束
SELECT SUBSTRING('sqlstudy.com', 4);
-- 從第 4 個字符開始,截取 2 個字符
SELECT SUBSTRING('sqlstudy.com', 4, 2);
-- 從倒數(shù)第 4 個字符開始,直到結(jié)束
SELECT SUBSTRING('sqlstudy.com', -4);
-- 從倒數(shù)第 4 個字符開始,截取 2 個字符
SELECT SUBSTRING('sqlstudy.com', -4, 2);結(jié)果:
+------------------------------+
| SUBSTRING('sqlstudy.com', 4) |
+------------------------------+
| study.com |
+------------------------------++---------------------------------+
| SUBSTRING('sqlstudy.com', 4, 2) |
+---------------------------------+
| st |
+---------------------------------++-------------------------------+
| SUBSTRING('sqlstudy.com', -4) |
+-------------------------------+
| .com |
+-------------------------------++----------------------------------+
| SUBSTRING('sqlstudy.com', -4, 2) |
+----------------------------------+
| .c |
+----------------------------------+
解釋:
SUBSTRING('sqlstudy.com', 4):從第 4 個字符開始,直到字符串結(jié)束,結(jié)果為'study.com'。SUBSTRING('sqlstudy.com', 4, 2):從第 4 個字符開始,截取 2 個字符,結(jié)果為'st'。SUBSTRING('sqlstudy.com', -4):從倒數(shù)第 4 個字符開始,直到字符串結(jié)束,結(jié)果為'.com'。SUBSTRING('sqlstudy.com', -4, 2):從倒數(shù)第 4 個字符開始,截取 2 個字符,結(jié)果為'.c'。
注意:
len 必須為非負(fù)整數(shù)。若省略 len,則默認(rèn)截取到字符串末尾。
若 pos 超出字符串長度或為 0,返回空字符串。例如:
SELECT SUBSTRING('abc', 0, 1); -- 結(jié)果:空字符串
SELECT SUBSTRING('abc', 5, 1); -- 結(jié)果:空字符串SUBSTRING_INDEX(str, delim, count):根據(jù)分隔符截取字符串
功能:根據(jù)分隔符 delim,從字符串 str 中截取出第 count 次出現(xiàn)的分隔符前或后的子字符串。count 為正數(shù)時,從左側(cè)開始計數(shù);為負(fù)數(shù)時,從右側(cè)開始計數(shù)。
語法:
SUBSTRING_INDEX(str, delim, count)
示例:
-- 截取第二個 '.' 之前的所有字符
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2);
-- 截取倒數(shù)第二個 '.' 之后的所有字符
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2);
-- 如果分隔符不存在,返回整個字符串
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1);結(jié)果:
+------------------------------------------------+
| SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2) |
+------------------------------------------------+
| www.sqlstudy |
+------------------------------------------------++-------------------------------------------------+
| SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2) |
+-------------------------------------------------+
| com.cn |
+-------------------------------------------------++---------------------------------------------------+
| SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1) |
+---------------------------------------------------+
| www.sqlstudy.com.cn |
+---------------------------------------------------+
解釋:
SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2):返回第 2 次出現(xiàn)的.之前的所有字符,結(jié)果為'www.sqlstudy'。SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2):返回倒數(shù)第 2 次出現(xiàn)的.之后的所有字符,結(jié)果為'com.cn'。SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1):由于.coc不存在于字符串中,返回整個字符串'www.sqlstudy.com.cn'。
注意:
若 count 超過分隔符實際出現(xiàn)的次數(shù),返回整個字符串。例如:
SELECT SUBSTRING_INDEX('a.b.c.d', '.', 5); -- 結(jié)果:'a.b.c.d'MID(str, pos, len) 或 SUBSTR(str, pos, len):與 SUBSTRING 等價
功能:與 SUBSTRING 函數(shù)功能相同,用于從指定位置開始截取指定長度的子字符串。
語法:
MID(str, pos, len) SUBSTR(str, pos, len)
示例:
-- 從第 4 個字符開始,截取 2 個字符
SELECT MID('sqlstudy.com', 4, 2);
-- 從倒數(shù)第 4 個字符開始,截取 2 個字符
SELECT SUBSTR('sqlstudy.com', -4, 2);結(jié)果:
+----------------------------------+
| MID('sqlstudy.com', 4, 2) |
+----------------------------------+
| st |
+----------------------------------++-----------------------------------+
| SUBSTR('sqlstudy.com', -4, 2) |
+-----------------------------------+
| .c |
+-----------------------------------+
解釋:
MID('sqlstudy.com', 4, 2)與SUBSTRING('sqlstudy.com', 4, 2)結(jié)果相同,均為'st'。SUBSTR('sqlstudy.com', -4, 2)與SUBSTRING('sqlstudy.com', -4, 2)結(jié)果相同,均為'.c'。
多字節(jié)字符處理
MySQL 的字符串截取函數(shù)默認(rèn)按字符(而非字節(jié))處理,適用于多字節(jié)字符集(如 UTF-8)。例如:
SELECT LEFT('中文測試', 2); -- 結(jié)果:'中文'
SELECT SUBSTRING('數(shù)據(jù)庫', 2, 2); -- 結(jié)果:'據(jù)庫'實際應(yīng)用場景
場景 1:提取郵箱的域名
SELECT email, SUBSTRING_INDEX(email, '@', -1) AS domain FROM users;
結(jié)果:
+-------------------+-------------+
| email | domain |
+-------------------+-------------+
| user@example.com | example.com |
+-------------------+-------------+
場景 2:解析 URL 中的路徑
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(url, '//', -1), '/', 1) AS host FROM website;
輸入:'https://www.sqlstudy.com/path'
輸出:'www.sqlstudy.com'
總結(jié)
| 函數(shù) | 功能概要 | 核心區(qū)別 |
|---|---|---|
LEFT() / RIGHT() | 從左右側(cè)截取固定長度 | 方向固定,長度明確 |
SUBSTRING() | 靈活指定起始位置和長度 | 支持正負(fù)位置,功能最全面 |
SUBSTRING_INDEX() | 基于分隔符截取 | 適合處理結(jié)構(gòu)化字符串(如路徑) |
MID() / SUBSTR() | 與 SUBSTRING 功能相同 | 語法別名,可互換使用 |
掌握這些函數(shù),可以高效處理字符串截取需求,提升數(shù)據(jù)處理的靈活性。
相關(guān)文章
Mysql啟動報錯Error1045(28000)的原因分析及解決
這篇文章主要介紹了Mysql啟動報錯Error1045(28000)的原因分析及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
MySql數(shù)據(jù)分區(qū)操作之新增分區(qū)操作
這篇文章主要介紹了MySql數(shù)據(jù)分區(qū)操作之新增分區(qū)操作,本文講解了測試創(chuàng)建分區(qū)表文件、插入測試數(shù)據(jù)、查詢P2中的數(shù)據(jù)等內(nèi)容,需要的朋友可以參考下2015-03-03
mysql installer web community 5.7.21.0.msi安裝圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql installer web community 5.7.21.0.msi,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09
innodb_index_stats導(dǎo)入備份數(shù)據(jù)時報錯表主鍵沖突的解決方法
下面小編就為大家?guī)硪黄猧nnodb_index_stats導(dǎo)入備份數(shù)據(jù)時報錯表主鍵沖突的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
MySQL5.7 如何通過邏輯備份遷移到GreatSQL及注意事項
在將數(shù)據(jù)庫從MySQL 5.7遷移到GreatSQL8.0.32時,由于數(shù)據(jù)量較小且關(guān)注安全性,決定使用mysqldump執(zhí)行邏輯備份,并將數(shù)據(jù)導(dǎo)入GreatSQL,這篇文章主要介紹了MySQL5.7 通過邏輯備份遷移到GreatSQL注意事項,需要的朋友可以參考下2024-06-06

