首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

看起来简单,实际无思路的Select语句。解决思路

2012-05-16 
看起来简单,实际无思路的Select语句。有一个字段,一部分内容重复Create Table #tmp(aa int,bb nvarchar(200

看起来简单,实际无思路的Select语句。
有一个字段,一部分内容重复
 
Create Table #tmp(aa int,bb nvarchar(200))
go
Insert #tmp valus(1,'广东省深圳市深圳火车站深圳火车站') -- 这行有重复的
Insert #tmp valus(2,'北京市海淀区委')
Insert #tmp valus(3,'广东省深圳市广东省深圳市火车站') -- 这行有重复的
Insert #tmp valus(4,'我家住在黄土高坡')
Insert #tmp valus(5,'湖南省长沙市万家丽路123号万家丽路123号') -- 这行有重复的


不需要列出是什么内容重复了,只需要查询出是哪些行资料中有重复的。



[解决办法]
几个字相同开始定义为有重复?3个字? 4个字?
[解决办法]
什么规律???
[解决办法]
这个比较麻烦。可能需要使用到游标,然后使用循环检测每个字符串。
这是一个字符串的,楼主可以把这个封装为一个函数
declare @s varchar(100),@i int,@j int, @s1 varchar(100)
set @s='湖南省长沙市万家丽路123号万家丽路123号'
set @i=1

while (@i<len(@s) )
begin
set @j=2
while(@j<len(@s))
begin
set @s1=substring(@s,@i,@j)
print @s1
if(charindex(@s1,@s,@i+1)>0)
begin
print '该字符串有重复'
end
else 
begin
set @j=@j+1
end
end
set @i=@i+1
end

或者使用游标取出每一行的数据,然后进行检测
[解决办法]
Insert #tmp valus(6,'嘻嘻哈哈')--这个算不算?
[解决办法]
好像网购时填写收货地址,如果这样的话可以修改一下程序
[解决办法]

SQL code
Create Table Test3(aa int,bb nvarchar(200))goInsert INTO Test3 values(1,'广东省深圳市深圳火车站深圳火车站') -- 这行有重复的Insert INTO Test3 values(2,'北京市海淀区委')Insert INTO Test3 values(3,'广东省深圳市广东省深圳市火车站') -- 这行有重复的Insert INTO Test3 values(4,'我家住在黄土高坡')Insert INTO Test3 values(5,'湖南省长沙市万家丽路123号万家丽路123号') -- 这行有重复的GOCREATE FUNCTION CheckString(@str nvarchar(200))   RETURNS integer  AS    BEGINDECLARE @Length INTDECLARE @Point INTDECLARE @Substring NVARCHAR(100)DECLARE @SubPoint INTDECLARE @Gap INTDECLARE @DoHave INTDECLARE @StrTemp NVARCHAR(100)SET @Point = 1SET @Gap = 5SET @DoHave = 0SET @Length = LEN(@Str)WHILE @Gap + @Point <= @LengthBEGIN    SET @StrTemp = @Str    WHILE @Point + @Gap <= @Length    BEGIN        SET @Substring = SUBSTRING(@Str,@Point,@Gap)        SET @StrTemp = REPLACE(@Str,@Substring,'')        IF LEN(@StrTemp) < @Length - @Gap        BEGIN            SET @DoHave = 1            SET @Point = @Length        END        SET @Gap = @Gap + 1    END    SET @Point = @Point + 1    SET @Gap = 5ENDRETURN @DoHaveENDSELECT * FROM Test3 WHERE dbo.CheckString(bb) > 0 

热点排行