![](/img/trans.png)
[英]Search SQL Server table column which has multiple leading and trailing spaces only
[英]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.