首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 字符串截取:按最後一個分隔符截取(如 URL 取最後一段)

     編輯:程式設計綜合問答

需求

字符串 'https://bbs.csdn.net/topics/new?forum_id=MSSQL,https://bbs.csdn.net/forums/MSSQL',按最後一個 '/' 截取右側部分,即獲取 'MSSQL'。

核心技巧:反轉字符串 + CHARINDEX + SUBSTRING


DECLARE @url VARCHAR(MAX) = 'https://bbs.csdn.net/forums/MSSQL';

-- 方法:反轉 -> 找第一個/位置 -> 正向截取 -> 再反轉
SELECT REVERSE(
    SUBSTRING(
        REVERSE(@url), 
        1, 
        CHARINDEX('/', REVERSE(@url)) - 1
    )
) AS last_segment;
-- 結果:MSSQL

步驟拆解

  1. REVERSE(@url) → 'LQSSM/sniamrof/ten.nsdsc.sbb//:ptth'
  2. CHARINDEX('/', ...) → 找到第一個 / 位置(此處為 6)
  3. SUBSTRING(..., 1, 6-1) → 取前 5 字符 'LQSSM'
  4. 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+)語義清晰不保證順序、無索引

應用場景

  • URL 路由最後一段提取
  • 文件路徑獲取文件名
  • 層級編碼取最細粒度代碼
  • 日誌解析提取關鍵標識

掌握反轉字符串技巧,輕松解決「從右向左第 N 個分隔符」類截取問題。

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