You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL提取字符串中指定次数斜杠间子串的问题求助

提取URL中指定分隔符间的内容

需求说明

给定URL字符串:https://www.facebook.com/9876543219876/posts/123456789123456/,需完成两个提取任务:

  • 提取第3个与第4个/之间的内容:9876543219876
  • 提取第5个与第6个/之间的内容:123456789123456

解决方案

方法1:嵌套CHARINDEX定位(兼容多数SQL版本)

通过多次调用CHARINDEX函数逐步定位目标分隔符的位置,再用SUBSTRING截取内容。

提取第3-4个/之间的用户ID

DECLARE @url NVARCHAR(255) = 'https://www.facebook.com/9876543219876/posts/123456789123456/'

-- 定位第3个/的位置
DECLARE @pos3 INT = CHARINDEX('/', @url, CHARINDEX('/', @url, CHARINDEX('/', @url) + 1) + 1)
-- 定位第4个/的位置
DECLARE @pos4 INT = CHARINDEX('/', @url, @pos3 + 1)

-- 截取内容
SELECT SUBSTRING(@url, @pos3 + 1, @pos4 - @pos3 - 1) AS UserID

提取第5-6个/之间的帖子ID

DECLARE @url NVARCHAR(255) = 'https://www.facebook.com/9876543219876/posts/123456789123456/'

-- 定位第5个/的位置
DECLARE @pos5 INT = CHARINDEX('/', @url, CHARINDEX('/', @url, CHARINDEX('/', @url, CHARINDEX('/', @url, CHARINDEX('/', @url) + 1) + 1) + 1) + 1)
-- 定位第6个/的位置
DECLARE @pos6 INT = CHARINDEX('/', @url, @pos5 + 1)

-- 截取内容
SELECT SUBSTRING(@url, @pos5 + 1, @pos6 - @pos5 - 1) AS PostID

方法2:使用STRING_SPLIT(SQL Server 2016及以上版本)

将URL按/拆分后,通过行号筛选直接获取目标内容:

提取用户ID(对应拆分后的第4段)

DECLARE @url NVARCHAR(255) = 'https://www.facebook.com/9876543219876/posts/123456789123456/'

SELECT value AS UserID
FROM STRING_SPLIT(@url, '/')
ORDER BY (SELECT NULL)
OFFSET 3 ROWS FETCH NEXT 1 ROW ONLY

提取帖子ID(对应拆分后的第6段)

DECLARE @url NVARCHAR(255) = 'https://www.facebook.com/9876543219876/posts/123456789123456/'

SELECT value AS PostID
FROM STRING_SPLIT(@url, '/')
ORDER BY (SELECT NULL)
OFFSET 5 ROWS FETCH NEXT 1 ROW ONLY

说明

  • 嵌套CHARINDEX的方式无需依赖特定SQL版本,每次调用时通过第三个参数指定搜索起始位置,确保定位到下一个分隔符。
  • STRING_SPLIT写法更简洁,但要注意:原URL开头的//会生成两个空行,所以目标内容对应的行号需按实际拆分结果调整。

内容的提问来源于stack exchange,提问作者pkmmast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:07:21