SQL中的复杂查找和替换

时间:2012-08-02 14:31:39

标签: sql sql-server replace

我有一个ProductName键/值对的列表,如下所示:

CREATE TABLE [dbo].[ProductNames]
(
    [Key] [nvarchar](100) NULL,
    [Value] [nvarchar](100) NULL
)

包含如下值:

'Pepsi', 'Pepsi®'
'Coke', 'Coke®'

我需要在文本字段中找到并替换不包含产品注册商标的值...并将其替换为完整的商标字符串。

例如:

 1. if 'Pepsi' is alone....it becomes 'Pepsi®'
 2. if 'Pepsi®' already exists...do nothing

更新 注册商标只是需要替换的一个例子。也可能有其他多字符替换。因此,可能需要更复杂的东西。例如,我可能会检测到'百事可乐',然后从键/值行的VALUE部分截断'百事可乐'......然后......尝试检测字符串中是否已存在截断值。如果没有,那么继续并替换值(类似的东西)。

3 个答案:

答案 0 :(得分:2)

也许这个解决方案可以帮到你。它将更新value未以®结尾的记录,并在最后添加。

update ProductNames
set Value = Value + '®'
where Value not like '%®'

答案 1 :(得分:0)

update ProductNames set 
   Value = CASE WHEN CHARINDEX('®',value,1) = 0 then value+'®' else value end

答案 2 :(得分:0)

我无法想到一种简单的方法。迭代每个特殊关键字并检查这些单词的开头,中间和结尾个案,假设您需要空格来分隔每个关键字。根据业务逻辑的要求,将操作分解为几个步骤。昂贵的是,但我认为这是一次性的事情。更好的是,在添加/修改行时运行此例程。