2010-08-20 43 views
1

我的数据库表中有一列有文本低和行低的列。在文本中,每行都需要更改一个url。在每一行中,url可以存在多次。替换文本字段中的字符串

我可以使用替换函数来更改数据库表中文本字段中的所有URL而不影响同一列中的其余文本?

感谢

+0

这些网址是什么?它指向一些本地资源还是指向一些外国站点? – 2010-08-20 08:31:47

回答

3

使用replace()

​​

制作精确的距离:像http://url_from.com/http://url_to.com/

+0

我怀疑所有的网址都是一样的 – 2010-08-20 08:31:08

+0

如果包含字符串的列是col1,并且我想将字符串'hello'更改为'bye',我将如何更改该查询? – oshirowanen 2010-08-20 08:33:37

+1

如果不是全部相同,则可以使用第三方功能regex_replace: http://www.php-groupies.de/blogs/archives/17-Regular-Expression-Functions-for-MySQL.html – cichy 2010-08-20 08:34:21

0

基于文章发布在http://sqlserver2000.databases.aspfaq.com/how-do-i-handle-replace-within-an-ntext-column-in-sql-server.html

我需要写一个查找和在文本字段中替换为CHAR(146)`。上面的文章为fort nText和文本使用nText的相同的解决方案与以下更改: - VARCHAR(32)nVARCHAR(32) - 使用@lenOldString = DATALENGTH(@oldString),而不是SET @lenOldString = DATALENGTH(@ oldString)/ 2。

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

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

IF CHARINDEX(@oldString,@newString) BEGIN PRINT '退出,以避免无限循环。'; END ELSE BEGIN

--Need的为n文字字段 --set @lenOldString = DATALENGTH(@oldString)/ 2

--use这个文本字段 SET @lenOldString = DATALENGTH(@ oldString)

DECLARE irows CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY为 选择 数据ID FROM dbo.tbData WHERE PATINDEX('%'+ @ oldString +'%',TextData)> 0;

OPEN irows;

FETCH NEXT FROM IROW INTO @currentDataID; WHILE(@@ FETCH_STATUS = 0) BEGIN

SELECT @TextPointer = TEXTPTR(的TextData) @TextIndex = PATINDEX( '%' + @ oldString + '%',的TextData) FROM DBO。tbData WHERE DataID = @currentDataID;

SELECT @TextPointer,@TextIndex

WHILE ( SELECT PATINDEX( '%' + @ oldString + '%',的TextData) FROM dbo.tbData WHERE 数据ID = @currentDataID ) BEGIN

SELECT @TextIndex = PATINDEX( '%' + @ oldString + '%',的TextData)-1- FROM dbo.tbData WHERE DataID = @currentDataID;

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

CLOSE irows; DEALLOCATE irows;

END