使用自定义条件删除表中的类似记录

时间:2010-12-12 08:48:20

标签: sql sql-server wildcard sql-delete

我在sql server中有一个表,在我的表中有一个像name这样的字段。 我需要从这个条件中删除表中的记录。 除最后一个字符外,所有字符都相似,最后一个字符是“a”或“b”

例如,表记录为name1aname2aname1b,.... 并且需要删除name1aname1b

2 个答案:

答案 0 :(得分: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)

输出:

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

答案 1 :(得分:0)

我想你问的是如何使用通配符识别(和删除)某些行?

在sql server中,单个字符通配符是'_',因此如果要删除以'name1'开头并且具有单个字符后缀的行,则此类事件将起作用:

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_'

如果'name1'部分后面有更多字符,您可以使用:

delete from @names where namecol like 'name1%'