在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |