SQL Server在TEXT字段中查找和替换

inc*_*ead 37 text sql-server-2005

我在SQL Server 2005中有一个从SQL Server 2000启动的数据库,它仍然使用TEXT类型字段而不是varchar(max).

我需要在文本字段中查找并替换一串字符,但是我发现的所有如何执行此操作的示例似乎都不适合我.似乎UPDATETEXT命令要求显式设置两个参数"insert_offset"和"delete_length",但我正在搜索的字符串可能会出现在文本中的任何一点,甚至是同一单元格中的几个点.我对这两个参数的理解是,我搜索的字符串将始终位于同一位置,因此insert_offset是UPDATETEXT命令将开始替换文本的文本中的空格数.

示例:需要查找:&lt;u&gt;并将其替换为:<u>

文本字段示例:

*Everyone in the room was <b>&lt;u&gt;tired&lt;/u&gt;.</b><br>Then they woke <b>&lt;u&gt;up&lt;/u&gt;.
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题吗?谢谢!

inc*_*ead 69

我终于弄明白了.它被隐藏在对jfrobishow发表的文章的评论中.非常感谢.

以下是导致我解决方案的整个响应:

引用:最初由fredclown发布

如果使用SQL 2005,则可以将replace替换为文本类型.你所要做的就是以下......

field = replace(cast(field as varchar(max)),'string','replacement')

非常简单.

两个大拇指到Fredclown !!! 命令对我来说也像是一种魅力.这就是我在SQL Server 2005数据库的Text字段中编写我的Update语句以查找和替换的内容

UPDATE TableName SET DBTextField = REPLACE(CAST(DBTextField AS varchar(MAX))
                                               ,'SearchText', 'ReplaceText')
FROM TableName
WHERE CHARINDEX('SearchText',CAST(DBTextField as varchar(MAX)))>0
Run Code Online (Sandbox Code Playgroud)

注意:这可能会截断你的dbfield的大小,但如果是一个长文本列,请将其设为nvarchar(max),你不应该截断!

  • 警告:这会将文本字段的内容裁剪为8000个字符 (8认同)