2013-03-09 31 views
1

为了将数据导入到我们的系统中,我获得了巨大的数据excel优势。我将它导入到SQL表中,以便我可以执行所需的数据转换。 我遇到了很多愚蠢的问题。 我不能找到一个解决方案的最新的一个是:SQL Server检查列数据中的重复问题

在公司名称,很多次我的名字重复两次(不总是):

[CompanyName] 
INTERDYN SA INTERDYN SA 
EARTH TOUR EARTH TOUR 
SOUNDLIGHTS JAJ CYTER 

没有模式,你可以看到。有没有一种狡猾的方式让副本发现并删除双胞胎公司的名字?

+1

修剪领域,垫偶数字符的如果需要的话,分两个等份,再修剪...查看是否有相同的其他? :) – 2013-03-09 09:27:10

+0

或者取第一个,比如说8个字符,看看CharIndex是否在位置9以后的子字符串中? – 2013-03-09 09:37:16

+0

让我们希望你不要与GPS制造商“汤姆汤姆”做生意, – 2013-03-09 09:51:32

回答

2

这只是比较字符串的第一部分和最后部分并检查中间字符是否为空白的问题。

CREATE TABLE Companies 
( 
    id int identity 
, CompanyName varchar(50) 
) 

INSERT INTO Companies (CompanyName) 
VALUES ('test') 
    , ('test test') 
    , ('testtest') 
    , ('testz test') 

-- Just query the corrected list 
SELECT CASE WHEN substring(CompanyName, LEN(CompanyName)/2+1, 1) = ' ' and substring(CompanyName, 1, LEN(CompanyName)/2) = substring(CompanyName, LEN(CompanyName)/2+2, LEN(CompanyName)) 
      THEN substring(CompanyName, 1, LEN(CompanyName)/2) 
      ELSE CompanyName 
     END 
FROM Companies 

-- update the incorrect values 
UPDATE Companies 
    SET CompanyName = substring(CompanyName, 1, LEN(CompanyName)/2) 
WHERE substring(CompanyName, LEN(CompanyName)/2+1, 1) = ' ' 
    AND substring(CompanyName, 1, LEN(CompanyName)/2) = substring(CompanyName, LEN(CompanyName)/2+2, LEN(CompanyName)) 

select * from Companies 

drop table Companies