在SQL中替换为通配符

前端之家收集整理的这篇文章主要介绍了在SQL中替换为通配符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道MS T-sql不支持正则表达式,但是我需要类似的功能.这是我要做的:

我有一个varchar表字段存储一个面包屑,像这样:

/ ID1:组别/ ID2:产品组别/ ID3:类别3 /

每个类别名称前面都有其类别ID,用冒号分隔.我想选择并显示这些面包屑,但是我想要删除类别ID和冒号,如下所示:

/组别/类别2 /类别3 /

应该剥离导致斜线(/)和包括冒号(:)之间的一切.

我没有提取数据的选项,外部操作,重新插入表中;所以我试图在一个SELECT语句中完成这个.

由于SELECT中返回的行数,我也无法使用游标循环遍历每行,并使用嵌套循环清除每个字段.

这可以做吗

谢谢所有 – 杰伊

解决方法

我想你最好的选择是使用递归的用户定义函数(UDF).我已经在这里添加了一些代码,您可以使用它来传递一个字符串来实现您要查找的结果.
CREATE FUNCTION ufn_StripIDsFromBreadcrumb (@cIndex int,@breadcrumb varchar(max),@theString varchar(max))

RETURNS varchar(max)

AS

BEGIN
DECLARE @nextColon int
DECLARE @nextSlash int

SET @nextColon = CHARINDEX(':',@theString,@cIndex)
SET @nextSlash = CHARINDEX('/',@nextColon)
SET @breadcrumb = @breadcrumb + SUBSTRING(@theString,@nextColon + 1,@nextSlash - @nextColon)

IF @nextSlash != LEN(@theString)

     BEGIN
     exec @breadcrumb = ufn_StripIDsFromBreadcrumb @cIndex =  @nextSlash,@breadcrumb = @breadcrumb,@theString = @theString
     END
RETURN @breadcrumb
END

然后,您可以执行它:

DECLARE @myString varchar(max)
EXEC @myString = ufn_StripIDsFromBreadcrumb 1,'/','/ID1:Category1/ID2:Category2/ID3:Category3/'
PRINT @myString
原文链接:https://www.f2er.com/mssql/75827.html

猜你在找的MsSQL相关文章