2010-12-12 48 views
1

我有一個表中的sql服務器,並在我的表是一個像name字段。 我需要從這個條件刪除我的表中的記錄。 所有字符,除了最後一個字符相似,最後一個字符是「A」或「B」刪除表中的類似記錄與自定義條件

例如表記錄name1aname2aname1b,.... ,需要刪除name1aname1b

+0

這是一個通配符問題? – amelvin 2010-12-12 10:42:06

回答

1

如果你問如何刪除在表中具有重複(匹配所有,但最後一個字符),而不是如何使用通配符任何行,這裏是如何:

declare @names table (keycol int, namecol varchar(10)) 

insert into @names (keycol, namecol) values (1, 'name1a') 
insert into @names (keycol, namecol) values (2, 'name1b') 
insert into @names (keycol, namecol) values (3, 'name2a') 
insert into @names (keycol, namecol) values (4, 'name2b') 
insert into @names (keycol, namecol) values (5, 'name3a') 
insert into @names (keycol, namecol) values (6, 'name4b') 

;with dupenames as 
(
    select LEFT(namecol,LEN(namecol)-1) as NameMinusOne 
    from @names 
    group by LEFT(namecol,LEN(namecol)-1) 
    having count(*) > 1 
) 
delete from @names 
from @names n 
inner join dupenames dn on dn.NameMinusOne = LEFT(n.namecol,LEN(n.namecol)-1) 

OUTPUT:

keycol  namecol 
----------- ---------- 
5   name3a 
6   name4b 
0

我想你是問如何使用通配符來識別(和刪除)某些行?

SQL Server中的單個字符通配符是「_」,所以如果你想去除啓動「名1」,並有一個字符後綴行這種事情會工作:

declare @names table (keycol int, namecol varchar(10)) 

insert into @names (keycol, namecol) values (1, 'name1a') 
insert into @names (keycol, namecol) values (2, 'name1b') 
insert into @names (keycol, namecol) values (3, 'name2a') 
insert into @names (keycol, namecol) values (4, 'name2b') 
insert into @names (keycol, namecol) values (5, 'name3a') 
insert into @names (keycol, namecol) values (6, 'name3b') 

delete from @names where namecol like 'name1_' 

如果有在「名1」部分後多個字符,你可以使用:

delete from @names where namecol like 'name1%'