t-sql 用户定义函数,用表中的查找替换文本

Posted

技术标签:

【中文标题】t-sql 用户定义函数,用表中的查找替换文本【英文标题】:t-sql user defined function to replace text with a lookup from a table 【发布时间】:2016-01-24 12:28:06 【问题描述】:

很遗憾,UDF 不是我的菜,我正在使用 SQL2014

我想使用 UDF 来替换字符串中的文本,方法是从表中查找要替换的值,替换值位于另一列的同一行中我设法在下面找到了这个示例,但这只删除了最后一个查找表的行

这是一个不太正确的,所以我正在寻找一个可行的方法

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

这是我的查找表的摘录(当前我们需要 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. 前面和后面都有空格

到项目结束时这个列表会很长

【问题讨论】:

【参考方案1】:

我认为以下方法会起作用:

BEGIN
    declare @Return varchar(max);

    SET @Return = @Value;

    SELECT @return = Replace(@return, LookupValue, ReplaceValue)
    FROM dbo.Dim_Seller;

    RETURN @return;
End;

我不太喜欢在这样的函数中使用变量(修改变量并同时设置它)。但是,此版本应该可以工作,并且比使用表或游标的 while 循环更简单,并且应该比递归 CTE 更快。

【讨论】:

以上是关于t-sql 用户定义函数,用表中的查找替换文本的主要内容,如果未能解决你的问题,请参考以下文章

使用 MySQL 查询查找和替换整个表中的文本

使用 MySQL 查询查找和替换整个表中的文本

从 Excel 工作表中查找并替换所有文本文件中的字符串

替换查找表值中的列

Power Query 自定义列查找和替换

如何使用 Windows 命令行环境查找和替换文件中的文本?