Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中复杂的查找和替换_Sql_Sql Server_Replace - Fatal编程技术网

SQL中复杂的查找和替换

SQL中复杂的查找和替换,sql,sql-server,replace,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 b

我有一个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
更新:
注册商标只是需要替换的一个例子。也可能有其他多字符替换。因此,可能需要更复杂的东西。例如,我可能会检测“Pepsi”,然后从键/值行的值部分截断“Pepsi”…然后…尝试检测字符串中是否已经存在截断的值。如果没有,请继续替换该值(类似于此)。

也许此解决方案会对您有所帮助。它将更新
未以
®
结尾的记录,并将其追加到末尾

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

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

谢谢您的回复。然而,注册商标只是源表中的一个示例。
update ProductNames set 
   Value = CASE WHEN CHARINDEX('®',value,1) = 0 then value+'®' else value end