2010-03-22 7 views
4

but: J'ai la chaîne « 1234432144 » Je veux seulement remplacer le premier 2 4 est avec « 10 » et je voudrais donc obtenir « 1231032144 »tsql: comment remplacer une sous-chaîne?

Est-il possible de le faire dans tsql?

jusqu'à présent je suis venu avec la fonction de sous-chaîne tsql()

substring('1234432144', 4, 2) 

qui tire 44 .. mais comment puis-je le remplacer au sein de la chaîne existante?

Si j'emballe une fonction de remplacement, elle remplace toutes les occurrences de 44 dans la chaîne.

des idées?

merci d'avance.

+0

Quels sont les critères pour remplacer seulement les 2 4 premiers? – gbn

+0

Je voulais juste un moyen de remplacer le premier ensemble de doubles 4 indépendamment de la position et ne pas le répéter le remplacement tout au long de la chaîne. merci – phill

Répondre

5

Édité avec une version parémétrisée.

DECLARE @myStr VARCHAR(50) 
DECLARE @findStr VARCHAR(50) 
DECLARE @replaceStr VARCHAR(50) 

SET @myStr = '1234432144' 
SET @findStr = '44' 
SET @replaceStr = '10' 

SELECT STUFF(@myStr, CHARINDEX(@findStr, @myStr), LEN(@findStr), @replaceStr) 
+0

très bien. Pourquoi n'ai-je pas pensé à cela ... – gbn

+0

Bien sûr, cela ne fonctionnera pas si l'exigence est de remplacer le premier 4 par 1 et le second 4 par 0 plutôt que de remplacer 44 par 10. Dans ce cas, vous devrez appeler le Fonctionne deux fois. –

+0

@gbn: parce que c'est lundi :) –