SQL - 查找具有2个或更多空格的值的行

问题描述:

我拥有名称和姓氏的sql表。姓在自己的专栏中。问题在于有两个姓氏的用户,因为他们有时会在姓氏之间添加多个空格,然后我必须找到并修正它们。SQL - 查找具有2个或更多空格的值的行

如何找到这些姓氏之间有多个空间?

+1

你正在使用哪个数据库? –

首先删除这些额外的空间。然后添加一个约束确保它不会再次发生:

alter table tablename add constraint surname_verify check (surname not like '% %') 

(或者甚至更好,有一个触发确保姓氏正确间隔,套管等)

如何删除多余的空间?取决于dbms。

你或许可以这样做:

update tablename set surname = replace(surname, ' ', ' ') 
where surname like '% %' 

是不需要的where条款,但使得交易小得多。

(迭代摆脱三倍或更多的空间。)或使用regexp_replace。

+0

同时我找到了解决办法:) SELECT * FROM'table' WHERE(姓氏LIKE'%%') – unforgiven

+0

很好。仍然添加该约束! – jarlh

即使整洁:

select string = replace(replace(replace(' select single  spaces',' ','<>'),'><',''),'<>',' ') 

输出:

选择单个空格

如果你想找到记录其中有一个以上的空间,那么你可以使用下面的技巧:

SELECT surname 
FROM yourTable 
WHERE LENGTH(REPLACE(surname, ' ', '')) < LENGTH(surname) - 1 

Th查询将在surname列中检测到两个或更多空格。如果你也想做一个UPDATE这是可能的,但它会是相当数据库特定的,并且在我写这个答案的时候你没有指定你的数据库。