2010-12-12 8 views
1

Ich habe eine Tabelle in SQL Server und in meiner Tabelle ist ein Feld wie name. Ich muss Datensätze aus meiner Tabelle mit dieser Bedingung löschen. Alle Zeichen sind ähnlich, außer für das letzte Zeichen, und das letzte Zeichen ist „a“ oder „b“Löschen Sie ähnliche Datensatz in Tabelle mit benutzerdefinierten Zustand

Zum Beispiel Tabelleneinträge sind name1a, name2a, name1b, .... und löschen müssen name1a und name1b

+0

Ist dies eine Wildcard Frage ist? – amelvin

Antwort

1

Wenn Sie fragen, wie alle Zeilen zu löschen, die Duplikate in der Tabelle hat (alle außer das letzte Zeichen passend), anstatt wie einen Platzhalter zu verwenden, hier ist wie:

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

Ich denke, Sie fragen, wie Sie mit Jokerzeichen bestimmte Zeilen identifizieren (und löschen) können?

in SQL Server die einzelnen Zeichen Wildcard ist ‚_‘ also, wenn Sie Zeilen entfernen möchten, die ‚name1‘ und haben ein einzelnes Zeichen Suffix diese Art der Sache beginnen funktioniert:

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

Wenn es mehr Zeichen nach dem ‚name1‘ Teil verwenden Sie:

delete from @names where namecol like 'name1%' 
Verwandte Themen