2017-02-05 1 views
0

une table est supposer comme celui-ciRequête de mise à jour de base de données?

ID   Desc 
1   I am a boy 
2   I am a boy xyz 
3   I am a boy abc 
4   xyzab I am a boy 
5   life is beautiful 
6   blank 

maintenant mon exigence est chaque fois consécutive la phrase « Je suis un garçon » est trouvé, il sera supprimé, mais le reste de la partie restera tel qu'il est. Si cette phrase n'est pas là, il n'y aura pas de changement. Donc, pour la table ci-dessus après la requête, il ressemblera à ceci

ID   Desc 
1   <blank> 
2   xyz 
3   abc 
4   xyzab 
5   life is beautiful 
6   blank 

Répondre

2

Vous pouvez essayer le remplacement suivant. Notez que j'emballe la colonne de description remplacée pour supprimer les restes d'espace en supprimant la phrase I am a boy.

UPDATE yourTable 
SET Desc = TRIM(REPLACE(Desc, 'I am a boy', '')) 
WHERE Desc LIKE '%I am a boy%' 

La clause WHERE limite l'opération UPDATE à ces enregistrements contenant la chaîne de garçon. Dans ce cas particulier, il pourrait être redondant. Mais en général, l'ajout d'une clause WHERE permet de gagner du temps en évitant de modifier un enregistrement lorsqu'aucune modification n'est prévue. En outre, en général (mais pas ici), une clause WHERE peut même accélérer la mise à jour lorsque la colonne where a un index.

+1

me devança. Une idée intéressante jetant le TRIM là-dedans - c'est probablement ce que le OP veut vraiment, même si ce n'est pas vraiment ce qui a été demandé. –

+0

La clause WHERE est redondante – Strawberry

+0

@Strawberry Je ne souhaite pas que les enregistrements non éligibles pour une mise à jour puissent être touchés. –

0

d'abord, il est préférable de changer le nom de la colonne Desc à quelque chose d'autre, car il est un mot clé réservé . Jetez un oeil à this

La requête suivante peut résoudre votre problème. J'ai changé le nom de la colonne ici à Dsc.

UPDATE mytable 
SET Dsc = REPLACE(Dsc, 'I am a boy', ''); 

SQLFiddle