2010-08-20 7 views
1

J'ai une colonne dans ma table de base de données qui a des bas de texte et des bas de lignes. Dans le texte, une URL doit être modifiée pour chaque ligne. Dans chaque rangée l'url peut exister plus d'une fois. Puis-je utiliser la fonction de remplacement pour modifier toutes les URL dans le champ de texte de ma table de base de données sans affecter le reste du texte dans cette même colonne?Remplacement d'une chaîne dans un champ de texte

Merci

+0

quelles sont ces URL? est-ce qu'il pointe vers des ressources locales ou vers des sites étrangers? –

Répondre

3

utilisation REPLACE()

 
UPDATE table SET text = REPLACE(text, 'from', 'to') 

Faire précise de: comme avec http://url_from.com/-http://url_to.com/

+0

Je doute que toutes les URL soient les mêmes –

+0

Comment changer cette requête si la colonne avec la chaîne est col1, et je veux changer la chaîne 'bonjour' en 'bye'? – oshirowanen

+1

Si tous ne sont pas identiques, il peut utiliser des fonctions tierces pour regex_replace: http://www.php-groupies.de/blogs/archives/17-Regular-Expression-Functions-for-MySQL.html – cichy

0

Basé sur l'article posté à http://sqlserver2000.databases.aspfaq.com/how-do-i-handle-replace-within-an-ntext-column-in-sql-server.html

je devais écrire une recherche et remplacer par CHAR (146) `dans un champ de texte. Ci-dessus article pour fort nText et la même solution pour texte travaillé avec nText avec les changements suivants: - VARCHAR (32) de nVARCHAR (32) - utilisez @lenOldString = DATALENGTH (@oldString) au lieu de SET @lenOldString = DATALENGTH (@ oldString)/2.

DECLARE @TextPointer BINARY (16), @TextIndex INT, @oldString VARCHAR (32), @newString VARCHAR (32), @lenOldString INT, INT @currentDataID;

SET @oldString = '' '; SET @newString = '' '';

IF CHARINDEX (@oldString, @newString) BEGIN IMPRIMER 'Quitter pour éviter boucle infinie.'; FIN AUTRE BEGIN

--Need les champs pour NTEXT --set @lenOldString = DATALENGTH (@oldString)/2

--Utilisez ce pour les champs texte SET @lenOldString = DATALENGTH (@ oldString)

DECLARE CURSOR iRows LOCAL FORWARD_ONLY STATIC READ_ONLY POUR CHOISIR DataID DE dbo.tbData OÙ PATINDEX ('%' + @ oldString + '%', TextData) > 0;

OPEN irows;

FETCH SUIVANT FROM irows INTO @currentDataID; WHILE (@@ FETCH_STATUS = 0) BEGIN

SELECT @TextPointer = TEXTPTR (TextData), @TextIndex = PATINDEX ('%' + @ oldString + '%', TextData) à partir de DBO.tbData O WH DataID = @currentDataID;

SELECT @TextPointer, @TextIndex

WHILE (SELECT PATINDEX ('%' + @ oldString + '%', TextData) DE dbo.tbData OÙ DataID = @currentDataID ) BEGIN

SELECT @TextIndex = PATINDEX ('%' + @ oldString + '%', TextData) -1 à partir de 012 dbo.tbDataO WH DataID = @currentDataID;

UPDATETEXT dbo.tbData.TextData @TextPointer @TextIndex @lenOldString @newString; END FETCH SUIVANT FROM irows INTO @currentDataID; END

FERMER irows; DEALLOCATE irows;

FIN

Questions connexes