t-sql 用户定义的函数,用 table 中的查找替换文本
t-sql user defined function to replace text with a lookup from a table
UDF 不是我的菜,我正在使用 SQL2014
我想使用 UDF 来替换字符串中的文本,方法是从 table 中查找要替换的值以及另一列中同一行中的替换值我设法在下面找到了这个示例但这只会删除查找的最后一行 table
这是一个不太正确的,所以我正在寻找一个可以工作的
USE [WebProductDataBase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[Ufn_ReplaceSeller]
(
@Value varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
declare @Return varchar(max)
SELECT @return = Replace(@Value, LookupValue, ReplaceValue) FROM dbo.Dim_Seller
RETURN @return
End
这是我的查找 table 的摘录(目前我们需要将 replaceValue 的值设置为空白,因为这是我们需要从字符串中删除 LookupValue 的值)请参见下面的字符串示例需要的结果
SellerID Name LookupValue ReplaceValue SellerUrl DataID
AW2485 ActivInstinct ActivInstinct 1
AW6342 All Outdoor All Outdoor 2
AW3023 Ambr Amb 3
AW3469 Amp Bos Amp Bos 4
AW988 Beau Expert Beau Expert 5
AW222 Sloggi Sloggi 6
AW333 Ladies Ladies 7
Source Row Field Result Needed
Ladies 1 Pack Sloggi Invisible Supreme Midi Briefs
Ladies 1 Pack Sloggi Invisible Supreme Midi Briefs
Ladies 1 Pack Sloggi EverNew Cotton Midi Briefs
Ladies 1 Pack Sloggi EverNew Cotton Midi Briefs
更好的选择是多替换功能,因为我需要一个功能来查找和删除多个值
需要源行字段结果
女士 1 件装 Sloggi Invisible Supreme Midi 内裤 Invisible Supreme 内裤
女士 2 件装 Sloggi EverNew 棉质中长三角裤 EverNew 棉质三角裤
So the LookupValue would be ReplaceValue
Sloggi Blank
Ladies Blank
Midi Blank
Packs Blank
Pack The rest below would also be blank for now
1
2
3
4
5
6
7
8
9
0
By The A. 这个前后都有空格
到项目结束时这个列表会很长
我认为以下方法可行:
BEGIN
declare @Return varchar(max);
SET @Return = @Value;
SELECT @return = Replace(@return, LookupValue, ReplaceValue)
FROM dbo.Dim_Seller;
RETURN @return;
End;
我不太喜欢在这样的函数中使用变量(修改变量并同时设置它)。然而,这个版本应该可以工作,并且比使用 table 或游标的 while
循环更容易编码,并且应该比递归 CTE 更快。
UDF 不是我的菜,我正在使用 SQL2014
我想使用 UDF 来替换字符串中的文本,方法是从 table 中查找要替换的值以及另一列中同一行中的替换值我设法在下面找到了这个示例但这只会删除查找的最后一行 table
这是一个不太正确的,所以我正在寻找一个可以工作的
USE [WebProductDataBase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[Ufn_ReplaceSeller]
(
@Value varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
declare @Return varchar(max)
SELECT @return = Replace(@Value, LookupValue, ReplaceValue) FROM dbo.Dim_Seller
RETURN @return
End
这是我的查找 table 的摘录(目前我们需要将 replaceValue 的值设置为空白,因为这是我们需要从字符串中删除 LookupValue 的值)请参见下面的字符串示例需要的结果
SellerID Name LookupValue ReplaceValue SellerUrl DataID
AW2485 ActivInstinct ActivInstinct 1
AW6342 All Outdoor All Outdoor 2
AW3023 Ambr Amb 3
AW3469 Amp Bos Amp Bos 4
AW988 Beau Expert Beau Expert 5
AW222 Sloggi Sloggi 6
AW333 Ladies Ladies 7
Source Row Field Result Needed
Ladies 1 Pack Sloggi Invisible Supreme Midi Briefs
Ladies 1 Pack Sloggi Invisible Supreme Midi Briefs
Ladies 1 Pack Sloggi EverNew Cotton Midi Briefs
Ladies 1 Pack Sloggi EverNew Cotton Midi Briefs
更好的选择是多替换功能,因为我需要一个功能来查找和删除多个值
需要源行字段结果
女士 1 件装 Sloggi Invisible Supreme Midi 内裤 Invisible Supreme 内裤
女士 2 件装 Sloggi EverNew 棉质中长三角裤 EverNew 棉质三角裤
So the LookupValue would be ReplaceValue
Sloggi Blank
Ladies Blank
Midi Blank
Packs Blank
Pack The rest below would also be blank for now
1
2
3
4
5
6
7
8
9
0
By The A. 这个前后都有空格
到项目结束时这个列表会很长
我认为以下方法可行:
BEGIN
declare @Return varchar(max);
SET @Return = @Value;
SELECT @return = Replace(@return, LookupValue, ReplaceValue)
FROM dbo.Dim_Seller;
RETURN @return;
End;
我不太喜欢在这样的函数中使用变量(修改变量并同时设置它)。然而,这个版本应该可以工作,并且比使用 table 或游标的 while
循环更容易编码,并且应该比递归 CTE 更快。