sqlserver替换字符串
‘壹’ sqlserver数据库更改字符串的值,假设我有一个字段name,值为:
先把所有‘替换成’‘’,再把‘’‘,’‘’替换成‘’,‘’
update 表名 set name =replace(name,‘'’,‘'''’)
update 表名 set name =replace(name,‘''','''’,‘'',''’)
‘贰’ sql怎么批量替换字段里的字符串的
方法一:varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace 替换 text ntext 数据类型字段的语句 。
update 表名 set 字段名=replace(cast(与前面一样的字段名 as varchar(8000)) ,'原本内容','想要替换成什么')方法二:
update [表名] set 字段名 = replace(与前面一样的字段名,'原本内容','想要替换成什么')
‘叁’ sqlserver 中ntext字段的批量替换(updatetext的用法)
一、问题描述:
1。在Sql
Server
中,ntext/text/image
字段不允许应用replace函数替换内容;
2。通过convert字段转换,可以把ntext字段转换为varchar(8000),然后用Relpace函数替换,不过,此方法,对于字段长度大于8000的ntext字段无效。
二、问题解决
整理通用存储过程,代码如下:
复制代码
代码如下:
CREATE
procere
[dbo].[Proc_UpdateNTextField]
@TargetTable
nvarchar(1000),
--目标表名
@TargetField
nvarchar(1000),
--目标字段名
@PKField
nvarchar(1000),
--该表主键字段名
@otxt
nvarchar(1000),
--需要替换的字符串
@ntxt
nvarchar(1000)
--替换后的字符串
as
begin
declare
@SqlStr
nvarchar(4000)
set
@SqlStr
=
'
declare
@txtlen
int
'
set
@SqlStr
=
@SqlStr
+
'
set
@txtlen
=
len('''
+
@otxt
+
''')
'
set
@SqlStr
=
@SqlStr
+
'
declare
@pos
int
'
set
@SqlStr
=
@SqlStr
+
'
set
@pos
=
0
'
set
@SqlStr
=
@SqlStr
+
'declare
curs
cursor
local
fast_forward
for
select
'
set
@SqlStr
=
@SqlStr
+
@PKField
+
'
,
textptr('
+
@TargetField
+')
from
'
+
@TargetTable
+'
where
'
+
@TargetField
+
'
like
''%'
+
@otxt
+'%'''
set
@SqlStr
=
@SqlStr
+
'
declare
@ptr
binary(16)
'
set
@SqlStr
=
@SqlStr
+
'
declare
@id
char(32)
'
set
@SqlStr
=
@SqlStr
+
'
open
curs
'
set
@SqlStr
=
@SqlStr
+
'
fetch
next
from
curs
into
@id,
@ptr
'
set
@SqlStr
=
@SqlStr
+
'
while
@@fetch_status
=
0
'
set
@SqlStr
=
@SqlStr
+
'
begin
'
set
@SqlStr
=
@SqlStr
+
'
select
@pos=
patindex(''%'
+
@otxt
+
'%'',ProctDesc)
from
ProctTemp
where
ProctID=@id
'
set
@SqlStr
=
@SqlStr
+
'
while
@pos>0
'
set
@SqlStr
=
@SqlStr
+
'
begin
'
set
@SqlStr
=
@SqlStr
+
'
set
@pos=@pos-1
'
set
@SqlStr
=
@SqlStr
+
'
updatetext
'
+
@TargetTable
+
'.'
+@TargetField
+
'
@ptr
@pos
@txtlen
'''
+
@ntxt
+
'''
'
set
@SqlStr
=
@SqlStr
+
'
select
@pos=
patindex(''%'
+
@otxt
+
'%'',ProctDesc)
from
ProctTemp
where
ProctID=@id
'
set
@SqlStr
=
@SqlStr
+
'
end
'
set
@SqlStr
=
@SqlStr
+
'
fetch
next
from
curs
into
@id,
@ptr
'
set
@SqlStr
=
@SqlStr
+
'
end
'
set
@SqlStr
=
@SqlStr
+
'
close
curs
'
set
@SqlStr
=
@SqlStr
+
'
deallocate
curs
'
EXECUTE
sp_executesql
@SqlStr
end
‘肆’ 如何替换整个SQL数据库中的字符
我也遇到过这样的问题。sql
server替换ntext字段,网上有很多存储过程,不过我试过,都有错误,不能执行,可能环境不一样吧。
我的解决办法是,自己写了一个程序,就是用datareader从数据库中一条一条读记录,如果记录中包含特定字符串,就把它替换掉然后更新会数据库。由于数据量大,可以定义一个int型变量,每5000条提示一下,可以知道更新进度。
听说用dataset可以批量更新多条记录,这个没用过,不太熟悉,楼主觉得我的方法不行,可以找找dataset的解决思路。
‘伍’ SQLServer如何删除字段中的某个字符串,或者替换为空格
sql="update Table set 字段=REPLACE ( 字段,'123' , ' ') where XXX条件"
把字段中123替换为空格
记得加条件
‘陆’ sql中如何批量替换字段里的字符串
update
[表名]
set
[字段名]=stuff([字段名],charindex('aaaa',[字段名],0),charindex('bbb',[字段名],0)-charindex('aaaa',[字段名],0)-4+7,'A'),
where
[字段名]
like
'%aaaa%bbb%'
就是用charindex取得'aaaa','bbb'的位置,计算需要替换字符串的长度,然后用stuff函数替换.
‘柒’ sql 替换某一位置字符
sql server 2005及以上版本可使用STUFF函数。
语法:
STUFF(character_expression,start,length,character_expression)
参数说明:
character_expression:一个字符数据表达式。character_expression可以是常量、变量,也可以是字符列或二进制数据列。
start:一个整数值,指定删除和插入的开始位置。如果start或length为负,则返回空字符串。如果start比第一个character_expression长,则返回空字符串。start可以是bigint类型。
length:一个整数,指定要删除的字符数。如果length比第一个character_expression长,则最多删除到最后一个character_expression中的最后一个字符。length可以是bigint类型。
返回类型
如果character_expression是受支持的字符数据类型,则返回字符数据。如果character_expression是一个受支持的 binary 数据类型,则返回二进制数据。
注释
如果开始位置或长度值是负数,或者如果开始位置大于第一个字符串的长度,将返回空字符串。如果要删除的长度大于第一个字符串的长度,将删除到第一个字符串中的第一个字符。
如果结果值大于返回类型支持的最大值,则产生错误。
示例
以下示例在第一个字符串abcdef中删除从第2个位置(字符b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串。
SELECTSTUFF('abcdef',2,3,'ijklmn');
GO
下面是结果集:
---------
aijklmnef
(1 row(s) affected)
以上摘自:https://msdn.microsoft.com/zh-cn/library/ms188043(v=sql.105).aspx
‘捌’ 想把sqlserver数据库中某字段里的特定字符修改,可以用sql命令来做吗
update
class
set
studentNo=replace(convert(varchar(8000),bbb),'2006','2010')
where
条件
如果全部替换一列不用要后边的where
条件
运行上句之前必须备份数据库