当前位置: 代码迷 >> Sql Server >> SQL查询replace替换ntext,text字段内容解决方法
  详细解决方案

SQL查询replace替换ntext,text字段内容解决方法

热度:45   发布时间:2016-04-27 12:41:02.0
SQL查询replace替换ntext,text字段内容
在一个表中有一个字段为text类型,我想把这个字段里所有出现"我们"替换为"中国" 

 sql语句要怎么写???

------解决方案--------------------
SQL code
1。varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace。         update   表名           set   字段名=replace(convert(varchar(8000),字段名), '要替换的字符 ', '替换成的值 ') 2。如果你的text大于8000,可以用下面的方法:       --测试数据 CREATE   TABLE   tb(col   ntext) INSERT   tb   VALUES(REPLICATE(   '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100, ' + '220000001,302000004,500200006,700002008,900002120, ',800)) DECLARE   @p   binary(16) SELECT   @p=TEXTPTR(col)   FROM   tb UPDATETEXT   tb.col   @p   NULL   0   tb.col   @p GO --替换处理定义 DECLARE   @s_str   nvarchar(1000),@r_str   nvarchar(1000) SELECT   @s_str= '00 '     --要替换的字符串 ,@r_str= '0000 '     --替换成该字符串 DECLARE   @p   varbinary(16) DECLARE   @start   int,@s   nvarchar(4000),@len   int DECLARE   @s_len   int,@step   int,@last_repl   int,@pos   int --替换处理参数设置 SELECT   --用于要判断每次截取数据,最后一个被替换数据位置的处理 @s_len=LEN(@s_str), --设置每次应该截取的数据的长度,防止REPLACE后数据溢出 @step=CASE   WHEN   LEN(@r_str)> LEN(@s_str) THEN   4000/LEN(@r_str)*LEN(@s_str) ELSE   4000   END --替换处理的开始位置 SELECT   @start=PATINDEX( '% [email protected]_str+ '% ',col), @p=TEXTPTR(col), @s=SUBSTRING(col,@start,@step), @len=LEN(@s), @last_repl=0 FROM   tb WHERE   PATINDEX( '% [email protected]_str+ '% ',col)> 0 AND   TEXTVALID( 'tb.col ',TEXTPTR(col))=1 WHILE   @len> [email protected]_len BEGIN --得到最后一个被替换数据的位置 WHILE   CHARINDEX(@s_str,@s,@last_repl)> 0 SET   @[email protected]_len +CHARINDEX(@s_str,@s,@last_repl) --如果需要,更新数据,同时判断下一个取数位置的偏移量 IF   @last_repl=0 SET   @[email protected]_len ELSE BEGIN SELECT   @last_repl=CASE WHEN   @len <@last_repl   THEN   1 WHEN   @[email protected]_repl> [email protected]_len   THEN   @s_len   ELSE   @[email protected]_repl+2   END, @s=REPLACE(@s,@s_str,@r_str), @[email protected] UPDATETEXT   TB.col   @p   @pos   @len   @s END --获取下一个要处理的数据 SELECT   @[email protected]+LEN(@s)[email protected]_repl+1, @s=SUBSTRING(col,@start,@step), @len=LEN(@s), @last_repl=0 FROM   tb END GO --显示处理结果 SELECT   datalength(col),*   FROM   tb DROP   TABLE   tb 上面说的是针对ntext字段的替换处理,如果要处理text字段,只需要先转换成ntext字段然后保存在临时表里面,处理完以后再从临时表写回text就行了。 其实一般象text,ntext字段这些都是抓到程序里面去处理的。
------解决方案--------------------
探讨

SQL code

1。varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace。
update 表名
set 字段名=replace(convert(varchar(8000),字段名), '要替换的字符 ', '替换成的值 ')
2。如果你的text大于8000……

------解决方案--------------------
探讨
在一个表中有一个字段为text类型,我想把这个字段里所有出现"我们"替换为"中国"

sql语句要怎么写???

------解决方案--------------------
update tb set col=replace(cast(col as varchar(max)),'我们','中国')
正解
------解决方案--------------------
ntext,text不支持replace函数。
可以使用nvarchar(max),varchar(max)类型。
  相关解决方案