我在SQL Server中有一个数据库及其数据。我需要在某些条件下更改某些列值的一部分。
想象值为“ 0010020001 ”。 002 属于我的数据库中的另一个值,每当我想将其更改为 005 时,我必须将之前的10位代码更新为“ 001005001 ”
实际上,我需要使用UPDATE
语句更新列值的一部分。我该怎么做(在这个例子中)?
答案 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