我有一個表中的sql服務器,並在我的表是一個像name
字段。 我需要從這個條件刪除我的表中的記錄。 所有字符,除了最後一個字符相似,最後一個字符是「A」或「B」刪除表中的類似記錄與自定義條件
例如表記錄name1a
,name2a
,name1b
,.... ,需要刪除name1a
和name1b
我有一個表中的sql服務器,並在我的表是一個像name
字段。 我需要從這個條件刪除我的表中的記錄。 所有字符,除了最後一個字符相似,最後一個字符是「A」或「B」刪除表中的類似記錄與自定義條件
例如表記錄name1a
,name2a
,name1b
,.... ,需要刪除name1a
和name1b
如果你問如何刪除在表中具有重複(匹配所有,但最後一個字符),而不是如何使用通配符任何行,這裏是如何:
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
我想你是問如何使用通配符來識別(和刪除)某些行?
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%'
這是一個通配符問題? – amelvin 2010-12-12 10:42:06