在SQL Server中查找重复项和几乎重复的项

在SQL Server中查找重复项和几乎重复的项,sql,sql-server,Sql,Sql Server,我有一个包含数千个文本条目的SQL表。 此表中有一些条目完全重复。 还有一些条目几乎是重复的,如下所示: Text Hi my name is John. I am 25 years old. How are you? Hi my name is John. 这些几乎重复的文本是较长文本的较短变体 现在我想写一个select语句,它选择表中的所有内容,除了完全重复的内容。此外,我想选择较长版本的几乎重复 有可能在一份声明中做到这一点吗 编辑:我忘了添加数据在同一列中,而不是在两个不同的列中

我有一个包含数千个文本条目的SQL表。 此表中有一些条目完全重复。 还有一些条目几乎是重复的,如下所示:

Text

Hi my name is John. I am 25 years old. How are you? 
Hi my name is John.
这些几乎重复的文本是较长文本的较短变体

现在我想写一个
select
语句,它选择表中的所有内容,除了完全重复的内容。此外,我想选择较长版本的几乎重复

有可能在一份声明中做到这一点吗

编辑:我忘了添加数据在同一列中,而不是在两个不同的列中。

请尝试以下代码片段:

select distinct [YOURCOLUMNNAME]
from [YOURTABLENAME] outside
where not exists (
select 1
from [YOURTABLENAME] inside
where left(inside.[YOURTABLENAME], len(outside.[YOURTABLENAME])) = outside.[YOURTABLENAME]
and inside.[YOURCOLUMNNAME] <> outside.[YOURCOLUMNNAME]
)
选择distinct[YOURCOLUMNNAME]
从[YOURTABLENAME]外面
不存在的地方(
选择1
从[YOURTABLENAME]内部
左(在[YOURTABLENAME]内),右(在[YOURTABLENAME]外]=在[YOURTABLENAME]外
里面。[你的专栏名]外面。[你的专栏名]
)

Distinct删除完全重复的文本,where子句确保相同文本没有更长的版本。

我认为以下内容应该完全符合您的要求:

select distinct t.text
from t
where not exists (select 1
                  from t t2
                  where t2.text like concat(t.text, '_%')
                 );
即使复制了最长的值,这也应该有效


是一个数据小提琴。

Do
选择DISTINCT
以删除精确的重复项。谢谢您的回答。您在值中添加了两个特定的实体。然而,在现实中,这些并不具体。我应该添加什么?代码应该与您的表一起使用,只需在select语句中将
#temp
替换为您的表名,将
[text]
替换为您的列名即可。嗨,Ryan。当我尝试你的代码时,我得到了一个错误:
msg8152,16级,状态10,第2行字符串或二进制数据将被截断。
Hi谢谢你的回答。我忘了添加数据在同一列中,而不是在两个不同的列中。另外,我收到错误消息:
Msg 8152,级别16,状态10,第2行字符串或二进制数据将被截断@gython。我认为只有当您试图将此数据插入另一个表时才会出现这种情况。@GordonLinoff-您发布此答案纯粹是为了下划线优化(我喜欢),还是我的答案中有错误?@RyanSparks。当我写这篇文章时,我还以为你的大脑里有个漏洞。然后我测试了这两个,我对错误的看法是错误的。