select COL1, count(COL1)
from Table1
group by COL1
having count (COL1) > 1;
我已经尝试了上面的查询,并根据没有尾随空格的数据得到了一些结果,但是上面的查询不适用于有尾随空格的数据,所以我尝试了下面的查询并没有得到任何结果。请建议
select COL1, count(COL1)
from Table1
where COL1 in(select Ltrim(Rtrim(COL1))from Table1)
group by COL1
having count (COL1) > 1;
答案 0 :(得分:3)
如果你想计算COL1
忽略前导和尾随空格的文本内容,那么就这样做吧。聚合时使用ltrim(rtrim(COL1))
:
select
ltrim(rtrim(COL1)) AS COL1_trimmed
count(*) cnt
from Table1
group by ltrim(rtrim(COL1))
having count(*) > 1;
答案 1 :(得分:1)
通常,SQL Server会使用varchar()
忽略尾随空格。但是,使用char()
时不会。我在猜测尾随"空格"不是真正的空间。
这是example。
with t as (
select cast('a' as varchar(255)) as x union all
select cast('a ' as varchar(255))
)
select t.x, count(*), min(t.x + '|') , max(t.x + '|')
from t
group by t.x;
返回:
a 2 "a |" "a|"
(我添加了双引号来澄清结果。)注意返回一行,而不是两行。但这些空间确实在价值的最后。
这使我怀疑尾随字符不是空格。
使用ASCII()
函数调查它们的一种方法。
答案 2 :(得分:0)
另一种方法是首先从表格中的该列中删除尾随和前导空格。
如果COL1是VARCHAR类型:
update Table1
set COL1 = rtrim(ltrim(COL1))
where COL1 != rtrim(ltrim(COL1));
如果COL1是CHAR类型,那么您只需要左边修剪:
update Table1
set COL1 = ltrim(COL1)
where COL1 != ltrim(COL1);
在清理之后,您可以在不修剪列的情况下使用分组查询
select COL1, count(*) as Total
from Table1
group by COL1
having count(*) > 1;