UPDATE un morceaux de chaine

Résolu
Signaler
Messages postés
60
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
-
Bonjour à tous,

Je voulais savoir si il était possible de faire un UPDATE uniquement sur un morceaux de chaine, je m'explique:
J'ai un champ qui contient une str avec par exemple: "12345488 45421 V" et je doit UPDATE la table pour mettre le champ a: "12345488 45421 A" (Pour une histoire de changement de statut.

Pour le moment j'utilise une fonction ou j'extraie la chaine, je la modifie mais je suppose que l'on doit pouvoir le faire directement avec une requête.

Sachant que le caractère a modifier est toujours celui le plus a gauche,
Voila, merci la horde !

There is no place like 127.0.0.1 /

6 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
Bonjour,

Si on parle bien de SQL Server, c'est possible assez facilement avec la fonction STUFF.

Si comme tendent à le montrer les exemples on parle bien du caractère le plus à droite et pas le plus à gauche, ça peut donner quelque chose de ce genre :
STUFF(@Str, LEN(@Str), 1, N'A')

Attention, ici nous utilisons la fonction LEN pour déterminer la position du dernier caractère, et cette fonction ne compte pas les espaces en fin de chaine (http://blogs.codes-sources.com/coq/archive/2009/12/08/sql-server-et-la-gestion-des-espaces-en-fin-de-cha-ne-ou-test-test.aspx).

Si on parle de celui de gauche alors c'est encore plus simple :
STUFF(@Str, 1, 1, N'A')



/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
37
Salut,

C'est surement possible

Example non testé
UPDATE matable
SET etat = SUBSTRING(etat, 12,10) + 'V'
WHERE etat = 'ABC .... A'
Messages postés
60
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010

Ma chaine a une taille variable donc je peut pas utiliser de valeur fixe.

There is no place like 127.0.0.1 /
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
Requiert au minimum SQL Server 2005, si mes souvenirs sont bons.


/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
60
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010

Je suis bien sous SQL server 2005 ou 2008.
Je viens d'essayer et ca fonctionne du feu de dieux ! Merci !

Super cette petite fonction STUFF


There is no place like 127.0.0.1 /
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
Oui, à part son nom :p


/*
coq
MVP Visual C#
CoqBlog
*/