2010-12-12 34 views
1

J'ai une table dans le serveur SQL et dans ma table est un champ comme name. Je dois supprimer les enregistrements de ma table avec cette condition. Tous les caractères sont similaires, sauf pour le dernier caractère, et le dernier caractère est « a » ou « b »Supprimer un enregistrement similaire dans le tableau avec des conditions personnalisées

Par exemple, les enregistrements de table sont name1a, name2a, name1b, .... et doivent supprimer name1a et name1b

+0

Est-ce une question générique? – amelvin

Répondre

1

Si vous demandez comment supprimer toutes les lignes qui ont des doublons dans la table (correspondant à tous, mais le dernier caractère) plutôt que sur la façon d'utiliser un caractère générique, voici comment:

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) 

SORTIE:

keycol  namecol 
----------- ---------- 
5   name3a 
6   name4b 
0

Je pense que vous demandez comment utiliser les caractères génériques pour identifier (et supprimer) certaines lignes?

Dans le serveur sql le caractère générique de caractère est « _ », donc si vous voulez supprimer des lignes qui commencent « nom1 » et ont un seul suffixe de caractère ce genre de chose fonctionnera:

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

S'il y a caractères après la « nom1 » une partie que vous utiliseriez:

delete from @names where namecol like 'name1%'