UPDATE un morceaux de chaine [Résolu]

Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
- - Dernière réponse : cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
- 16 juil. 2010 à 16:20
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 /
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
64
3
Merci
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
*/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 135 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_coq
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
Salut,

C'est surement possible

Example non testé
UPDATE matable
SET etat = SUBSTRING(etat, 12,10) + 'V'
WHERE etat = 'ABC .... A'
Commenter la réponse de nhervagault
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
Ma chaine a une taille variable donc je peut pas utiliser de valeur fixe.

There is no place like 127.0.0.1 /
Commenter la réponse de Nitrakz
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
64
0
Merci
Requiert au minimum SQL Server 2005, si mes souvenirs sont bons.


/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
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 /
Commenter la réponse de Nitrakz
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
64
0
Merci
Oui, à part son nom :p


/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq