我继承了一个项目,该项目在某种程度上以应用程序设置表中的随机行结束了重复。我成功删除了重复的行,但后来我注意到所有行的类型为nvarchar的实际值也是重复的。
例如,一行包含键列Error Email Address
和值列websupport@mycompany.com,websupport@mycompany.com
。 “值”列应包含websupport@mycompany.com
。像这样的记录很多,都遵循The value,The value
的相同模式。
如何检测“值”列何时包含此类重复数据并进行更正?
请注意,单独使用逗号并不足以说明该行无效,因为密钥Default Error Message
值Oops, something went wrong
之类的内容是正确的,并且还包含逗号。
答案 0 :(得分:3)
这是一个可以解决问题的update
:
update t
set value = left(value, len(val)/2)
where left(value, len(val)/2) = right(value, len(val)/2) and
substring(value, (len(val)/2) + 1, 1) = ',';
您可以先执行select
验证逻辑:
select value
from t
where left(value, len(val)/2) = right(value, len(val)/2) and
substring(value, (len(val)/2) + 1, 1) = ',';
答案 1 :(得分:1)
以下是查询:
Update TableName
set Col1=substring(Col1,0,charindex(',',Col1))
where substring(Col1,0,charindex(',',Col1))=substring(Col1,charindex(',',Col1)+1,500)
将Col1替换为列名,将TableName替换为实际的表名。它只会替换逗号(,)之前和之后的值与单个值相同的行。
答案 2 :(得分:0)
从blah中选择*,其中包含'%@%,%@%'
等电子邮件对于如何插入错误数据,您似乎还有其他问题需要处理。
答案 3 :(得分:0)
我会尝试类似https://stackoverflow.com/a/5123680/1504882的地方你要在列上拆分列,当Left = Right时,将列更新为(无论你选择什么,左/右)