在SQL中保留url的结尾

在SQL中保留url的结尾,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个存储过程,它返回一个字符串,类似于//path1/path2/item.itm,//path1/path3/item.itm或//path4/path5/item.itm我想做的是让它只返回类似于/path2/item.itm的内容。我知道sql中有一个replace,类似于replace(字符串“//path1',”)但这不起作用,因为字符串在所有条目中都不一致。我无法在代码中执行此操作,因为我可能需要将值放回 如果我在代码中这样做(我不能这样做),它将是沿着 string = str

我有一个存储过程,它返回一个字符串,类似于
//path1/path2/item.itm
//path1/path3/item.itm
//path4/path5/item.itm
我想做的是让它只返回类似于
/path2/item.itm
的内容。我知道sql中有一个replace,类似于
replace(字符串“//path1',”)
但这不起作用,因为字符串在所有条目中都不一致。我无法在代码中执行此操作,因为我可能需要将值放回

如果我在代码中这样做(我不能这样做),它将是沿着

string = string.Remove(string.LastIndexOf('/'),
                       string.Length - string.LastIndexOf('/'));
但我不知道如何在SQL中执行此操作,也不知道是否可以执行此操作。

您可以使用此选项:

declare @str varchar(100) = '//path1/path2/item.itm'
select SUBSTRING(@str, PATINDEX('%[^/]/%', @str) + 1, LEN(@str) - PATINDEX('%[^/]/%', @str))
select SUBSTRING(@str, PATINDEX('%[^/]/%', @str) + 1, 8000)
或者,如果您知道字符串的最大长度(我假设),表示max=8000,则可以使用以下公式:

declare @str varchar(100) = '//path1/path2/item.itm'
select SUBSTRING(@str, PATINDEX('%[^/]/%', @str) + 1, LEN(@str) - PATINDEX('%[^/]/%', @str))
select SUBSTRING(@str, PATINDEX('%[^/]/%', @str) + 1, 8000)

我不确定这是否比PATINDEX()快,但您可以将字符串的长度反转为
/
,然后再将其反转如下:

  SELECT  REVERSE(LEFT(REVERSE(path),CHARINDEX('/',REVERSE(path))))
注意,我没有测试,所以可能会有打字错误。

请检查