SQL Server 2014如何用另一表值替换本表值?附代码需求
用Countries表的正确国名替换Coo_data表中的错误值(SQL Server 2014)
我经常处理这类脏数据匹配的需求,结合你的场景,给你几个循序渐进的解决方案,从通用匹配到精准替换,都适配SQL Server 2014:
1. 先清理脏数据,再模糊匹配
你的response字段里有各种干扰项(比如%、年份、拼写错误),第一步先把这些无关字符去掉,再和标准国名匹配会更准确。
第一步:创建字符串清理函数(可选但超实用)
先写个自定义函数,把response里的非字母/空格字符都去掉,只保留核心国名字段:
CREATE FUNCTION dbo.CleanCountryName(@input NVARCHAR(100)) RETURNS NVARCHAR(100) AS BEGIN DECLARE @output NVARCHAR(100) = '' DECLARE @i INT = 1 WHILE @i <= LEN(@input) BEGIN -- 只保留字母和空格,过滤掉数字、符号之类的干扰项 IF SUBSTRING(@input, @i, 1) LIKE '[a-zA-Z ]' SET @output += SUBSTRING(@input, @i, 1) SET @i += 1 END -- 收尾:去掉首尾多余空格 SET @output = LTRIM(RTRIM(@output)) RETURN @output END GO
第二步:用两种匹配逻辑替换数据
方案A:前缀/包含匹配(适合"Saudi"→"Saudi Arabia"这类部分匹配)
如果错误国名是标准国名的前缀,或者标准国名包含错误国名,用LIKE就能匹配:
UPDATE cd SET cd.response = c.Country FROM [Coo data] cd JOIN Countries c -- 双向匹配:清理后的错误名是标准名前缀,或者反过来 ON dbo.CleanCountryName(cd.response) LIKE c.Country + '%' OR c.Country LIKE dbo.CleanCountryName(cd.response) + '%'
方案B:发音匹配(解决拼写错误,比如"Honderas"→"Honduras")
SQL Server的DIFFERENCE函数可以比较两个字符串的发音相似度(取值0-4,4是最像),适合处理拼写错误:
UPDATE cd SET cd.response = c.Country FROM [Coo data] cd JOIN Countries c -- 相似度≥3基本能覆盖大部分拼写小错误 ON DIFFERENCE(dbo.CleanCountryName(cd.response), c.Country) >= 3
2. 精准CASE替换(避免通用匹配的误差)
如果通用匹配出现误匹配的情况,直接写CASE语句针对特定错误值精准替换,准确率拉满:
UPDATE [Coo data] SET response = CASE WHEN response LIKE '%Saudi%' THEN 'Saudi Arabia' WHEN response LIKE '%Honderas%' THEN 'Honduras' WHEN response LIKE '%Argentina%' THEN 'Argentina' WHEN response LIKE '%Ecuadar%' THEN 'Ecuador' -- 可以继续添加其他已知的错误模式 ELSE response -- 没匹配到的保持原样,避免误改 END
3. 先验证再更新(必做!)
不管用哪种方案,先跑SELECT验证匹配结果,确认没问题再执行UPDATE:
SELECT cd.id, 原始值 = cd.response, 匹配到的标准国名 = c.Country, 清理后的值 = dbo.CleanCountryName(cd.response) FROM [Coo data] cd LEFT JOIN Countries c ON DIFFERENCE(dbo.CleanCountryName(cd.response), c.Country) >= 3 OR dbo.CleanCountryName(cd.response) LIKE c.Country + '%' OR c.Country LIKE dbo.CleanCountryName(cd.response) + '%'
这样你能清楚看到哪些记录能匹配上,哪些不能,再调整规则。
内容的提问来源于stack exchange,提问作者wmb8084
相关产品推荐
相关产品推荐

