加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在SQL中替换为通配符

发布时间:2020-12-12 08:37:25 所属栏目:MsSql教程 来源:网络整理
导读:我知道MS T-SQL不支持正则表达式,但是我需要类似的功能.这是我要做的: 我有一个varchar表字段存储一个面包屑,像这样: / ID1:组别/ ID2:产品组别/ ID3:类别3 / 每个类别名称前面都有其类别ID,用冒号分隔.我想选择并显示这些面包屑,但是我想要删除类别ID和
我知道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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读