我知道 MS T-SQL 不支持正则表达式,但我需要类似的功能。这就是我正在尝试做的事情:
我有一个 varchar 表字段,用于存储面包屑,如下所示:
/ID1:类别1/ID2:类别2/ID3:类别3/
每个类别名称前面都有其类别 ID,并用冒号分隔。我想选择并显示这些面包屑,但我想删除类别 ID 和冒号,如下所示:
/类别1/类别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('/', @theString, @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
关于sql - 在 SQL 中替换为通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2740799/