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