簡體   English   中英

如何在列中具有尾隨空格值的SQL Server表中查找重復項

[英]How to find duplicates in a SQL Server table which has trailing spaces values in a column

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;

如果要計算COL1的文本內容而忽略COL1和結尾的空格,則只需這樣做。 匯總時使用ltrim(rtrim(COL1))

select
    ltrim(rtrim(COL1)) AS COL1_trimmed
    count(*) cnt
from Table1
group by ltrim(rtrim(COL1))
having count(*) > 1;

通常,SQL Server使用varchar()忽略尾隨空格。 但是,使用char()時不會。 我猜尾隨的“空格”不是真正的空格。

這是一個例子

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()函數。

另一種方法是首先從表中的該列中刪除尾隨和前導空格。

如果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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM