2010-08-12 68 views
1

下面是所有的SQL Server 2000名专家为您解答:SQL:在一个领域找到重复的值,但使用SUBSTRING()

我只有1台......我已经可以找到,如果在任何一个值,某个字段,也出现在另一个记录中。

即:是否有记录在同一 场再有 “ABCDEFGHI”的字段,然后 “ABCDEFGHI” ......但在另一个纪录。

但我尝试使用子字符串时遇到了麻烦。

即:有没有任何记录有“CDEF”在 一个字段,然后“DEFG”再次在 同场......但在另一个纪录。 (编辑:那当然不会匹配)

我想比较1字段的部分和另一部分的字段。 只比较字符3-6个字符,字符4-7。 (我需要为这两个字段指定我自己的开始范围。) 具体字母是什么......并不重要。只是他们'匹配'。

这似乎并不工作:

SELECT t1.ID + ' + ' + t2.ID 
FROM InfoTable As t1   
INNER JOIN InfoTable AS t2  ON t1.ID = SUBSTRING(t2.ID, 3, 4) 

(编辑:我还需要但未列出只是匹配自己的任何记录。)

+0

这是远从清楚你想要在这里找到什么。你是否想要所有其中有“CDEF”的记录,链接到其中任何地方有“DEFG”的所有其他记录?是否所有记录都具有从位置3开始的“CDEF”,与从位置4开始具有“DEFG”的所有其他记录相关联?是否所有记录都具有共同字符串的字符3到6,并且链接到具有相同共同字符串的字符4到7的所有其他记录?还有别的吗? – 2010-08-12 17:10:41

+0

他们在哪里?不,只是我指定的开始/结束子串。 从位置a开始,并且b字符长... 匹配从位置c开始并且长度为d个字符的记录。 (当然,b和d必须是相同的才能发生匹配。) – HelenJ 2010-08-12 17:20:42

回答

1

也许

SELECT t1.ID + ' + ' + t2.ID 
FROM InfoTable As t1   
INNER JOIN InfoTable AS t2  ON SUBSTRING(t1.ID,3,6) = SUBSTRING(t2.ID, 4, 7) 
+0

我试过了,它似乎会返回与自己匹配的记录。有没有办法排除那些'相同记录'的比赛? – HelenJ 2010-08-12 17:14:29

+0

在ON子句中添加另一个条件... 和t1.id 2010-08-12 17:45:09

+0

只需将AND AND.ID <> T2.ID'添加到WHERE子句。这是假设ID是唯一的。如果您提供了表格定义,样本数据和预期结果,这可能是最好的 - 发布SQL查询问题时总是一个好主意。 – 2010-08-12 17:45:38

相关问题