更新SQL Server中的列值的一部分

时间:2011-12-25 12:08:50

标签: sql-server tsql

我在SQL Server中有一个数据库及其数据。我需要在某些条件下更改某些列值的一部分。

想象值为“ 0010020001 ”。 002 属于我的数据库中的另一个值,每当我想将其更改为 005 时,我必须将之前的10位代码更新为“ 001005001

实际上,我需要使用UPDATE语句更新列值的一部分。我该怎么做(在这个例子中)?

2 个答案:

答案 0 :(得分:1)

虽然其他人都是正确的,但如果您控制了架构,那么绝对不应该以这种方式存储您的数据,如果我无法调整架构,这就是我解决您所描述的问题的方法。

IF OBJECT_ID('tempdb..#test') IS NOT NULL
DROP TABLE #test

create table #test
(
id int,
multivaluecolumn varchar(20)
)

insert #Test
select 1,'001002001'
UNION
select 2,'002004002'
UNION
select 3,'003006003'
GO

declare @oldmiddlevalue char(3) 
set @oldmiddlevalue= '002'
declare @newmiddlevalue char(3)
set @newmiddlevalue = '005'

select * from #Test

Update #Test set multivaluecolumn =left(multivaluecolumn,3) + @newmiddlevalue + right(multivaluecolumn,3)
where substring(multivaluecolumn,4,3) = @oldmiddlevalue


select * from #Test

答案 1 :(得分:0)

为什么不使用CSV(逗号分隔值)或使用任何其他符号(如〜)来存储值。一旦你需要更新它的一部分使用PHP爆炸功能,然后更新它。完成工作后,再次连接所有值以获得要存储在列中的所需字符串。

在这种情况下,您的列的值为VARCHAR,如001~002~0001