日期:2014-05-18  浏览次数:20513 次

数据以数组形式保存的,如何按要求修改数组内容..
我要修改数据库表news字段news_class   里面的内容
news_class字段的数据是数组   形式   "1,2,3,8,9 "

我要把数组元素中的一些数值进行修改了比如:把数据库中有元素的数值是   2   的字段修改为改20

-------------------------------下面是bill024(咖啡熊)   给我的代码

create   table   test(news_class   varchar(20))
insert   test   select   '1,2,3,8,9 '

update   test   set   news_class=stuff(news_class,charindex( ',2, ', ', '+news_class+ ', '),1, '20 ')
select   *   from   test


上面的代码有点错误,如果我想吧20修改为3的话,运行以后是   20就变为30   了


------解决方案--------------------
create table test(news_class varchar(20))
insert test select '1,20,3,8,9 '

declare @s varchar(10)
set @s= '20 '
update test set news_class=stuff(news_class,charindex( ', '+@s+ ', ', ', '+news_class+ ', '),len(@s), '3 ')
select * from test

drop table test
------解决方案--------------------
--- 20 变 30
update test set news_class=stuff(news_class,charindex( ',20, ', ', '+news_class+ ', '),2, '30 ')
select * from test
------解决方案--------------------
declare @str varchar(100),@target varchar(20),@replace varchar(20)
--将2替换为20
set @str = '1,2,3,8,9 '
set @target = '2 '
set @replace = '20 '
select replace(@str, ', ' + @target + ', ', ', ' + @replace + ', ')

/*结果
1,20,3,8,9
*/

--将20替换为3
set @str = replace(@str, ', ' + @target + ', ', ', ' + @replace + ', ')
set @target = '20 '
set @replace = '3 '
select replace(@str, ', ' + @target + ', ', ', ' + @replace + ', ')
/*结果
1,3,3,8,9
*/

------解决方案--------------------
create table test(news_class varchar(20))
insert test select '1,2,3,8,9 '

declare @target varchar(20),@replace varchar(20)

set @target = '2 ' ---要替换的值
set @replace = '20 ' ---替换的值

update test set news_class=left(stuff(replace( ', '+news_class+ ', ', ', '+@target+ ', ', ', '+@replace+ ', '),1,1, ' '),len(stuff(replace( ', '+news_class+ ', ', ', '+@target+ ', ', ', '+@replace+ ', '),1,1, ' '))-1)
select * from test

drop table test