我在sql server中有一个表,在我的表中有一个像name
这样的字段。
我需要从这个条件中删除表中的记录。
除最后一个字符外,所有字符都相似,最后一个字符是“a”或“b”
例如,表记录为name1a
,name2a
,name1b
,....
并且需要删除name1a
和name1b
答案 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%'