字符串 'https://bbs.csdn.net/topics/new?forum_id=MSSQL,https://bbs.csdn.net/forums/MSSQL',按最後一個 '/' 截取右側部分,即獲取 'MSSQL'。
DECLARE @url VARCHAR(MAX) = 'https://bbs.csdn.net/forums/MSSQL';
-- 方法:反轉 -> 找第一個/位置 -> 正向截取 -> 再反轉
SELECT REVERSE(
SUBSTRING(
REVERSE(@url),
1,
CHARINDEX('/', REVERSE(@url)) - 1
)
) AS last_segment;
-- 結果:MSSQL
REVERSE(@url) → 'LQSSM/sniamrof/ten.nsdsc.sbb//:ptth'CHARINDEX('/', ...) → 找到第一個 / 位置(此處為 6)SUBSTRING(..., 1, 6-1) → 取前 5 字符 'LQSSM'REVERSE(...) → 恢復正序 'MSSQL'
CREATE FUNCTION dbo.GetLastSegment(@str VARCHAR(MAX), @delimiter CHAR(1))
RETURNS VARCHAR(MAX)
AS BEGIN
DECLARE @rev VARCHAR(MAX) = REVERSE(@str);
DECLARE @pos INT = CHARINDEX(@delimiter, @rev);
IF @pos = 0 RETURN @str; -- 無分隔符返回原串
RETURN REVERSE(SUBSTRING(@rev, 1, @pos - 1));
END;
-- 用法
SELECT dbo.GetLastSegment('a/b/c/d', '/'); -- 'd'
| 方法 | 優點 | 缺點 |
|---|---|---|
| REVERSE+CHARINDEX | 純 SQL、兼容所有版本 | 雙重反轉有性能開銷 |
| XML 解析 | 可按多級路徑提取 | 需構造 XML、大數據慢 |
| CLR 函數 | 性能最強、邏輯靈活 | 需部署組件、權限受限 |
| STRING_SPLIT (SQL 2016+) | 語義清晰 | 不保證順序、無索引 |
掌握反轉字符串技巧,輕松解決「從右向左第 N 個分隔符」類截取問題。