我知道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