【问题标题】:Delete similar record in table with custom condition使用自定义条件删除表中的相似记录
【发布时间】:2010-12-12 08:48:19
【问题描述】:

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

例如表记录是name1a,name2a,name1b,.... 并且需要删除name1aname1b

【问题讨论】:

  • 这是通配符问题吗?

标签: sql sql-server wildcard sql-delete


【解决方案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

【讨论】:

    【解决方案2】:

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

    在 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%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 2023-01-01
      • 2012-07-03
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      相关资源
      最近更新 更多