2010-12-12 7 views
1

私はSQLサーバーにテーブルを持っており、私のテーブルにはnameのようなフィールドがあります。 この条件でテーブルからレコードを削除する必要があります。 すべての文字が最後の文字を除いて類似しており、最後の文字は、例えばテーブルのレコードについては「A」または「B」カスタム条件でテーブル内の同様のレコードを削除します

です....、name1aname2aname1bあり とname1aname1b

を削除する必要があります
+0

が、これはワイルドカード質問ですか? – amelvin

答えて

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

ワイルドカードを使用して特定の行を特定(および削除)する方法について質問していると思いますか?

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

がある場合は、次のSQL Serverでは

は、単一文字のワイルドカードは「_」あなたは「NAME1」を起動し、単一文字の接尾辞を持つ行を削除したい場合はこの種のものは動作するようです「NAME1」の部分の後にあなたが使用する複数の文字:

delete from @names where namecol like 'name1%' 
関連する問題