请问我有表a 字段color,urm
现有数据
color urm
0 红色,绿色,蓝色|M,S,X
0 白色,蓝色|M,S,X
0 黑色,蓝色|M,S,X
0 红色,黑色,蓝色|M,S,X
0 红色,蓝色|M,S,X如何写一条语句update 语句更改color字段使color=urm的颜色数目
变成
3 红色,绿色,蓝色|M,S,X
2 白色,蓝色|M,S,X
2 黑色,蓝色|M,S,X
3 红色,黑色,蓝色|M,S,X
2 红色,蓝色|M,S,X
现有数据
color urm
0 红色,绿色,蓝色|M,S,X
0 白色,蓝色|M,S,X
0 黑色,蓝色|M,S,X
0 红色,黑色,蓝色|M,S,X
0 红色,蓝色|M,S,X如何写一条语句update 语句更改color字段使color=urm的颜色数目
变成
3 红色,绿色,蓝色|M,S,X
2 白色,蓝色|M,S,X
2 黑色,蓝色|M,S,X
3 红色,黑色,蓝色|M,S,X
2 红色,蓝色|M,S,X
if OBJECT_ID('a','u') is not null drop table a
go
create table a(color int,urm varchar(1000))
go
insert into a
select 0,'红色,绿色,蓝色|M,S,X' union all
select 0,'白色,蓝色|M,S,X' union all
select 0,'黑色,蓝色|M,S,X' union all
select 0,'红色,黑色,蓝色|M,S,X' union all
select 0,'红色,蓝色|M,S,X'
--update 语句 根据色 替换为多加一个字符,根据长句加减
update a set color=LEN(replace(urm,'色','色_'))-LEN(urm)
select * from a
/*
color urm
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3 红色,绿色,蓝色|M,S,X
2 白色,蓝色|M,S,X
2 黑色,蓝色|M,S,X
3 红色,黑色,蓝色|M,S,X
2 红色,蓝色|M,S,X(5 row(s) affected)*/
if OBJECT_ID('a','u') is not null drop table a
go
create table a(color int,urm varchar(1000))
go
insert into a
select 0,'红色,绿色,蓝色|M,S,X' union all
select 0,'白色,蓝色|M,S,X' union all
select 0,'黑色,蓝色|M,S,X' union all
select 0,'红色,黑色,蓝色|M,S,X' union all
select 0,'红色,蓝色|M,S,X'
--update 语句先截取'|',然后把截取后的值加上 ',' 再用替换和长度加减
update a set color=len(REPLACE(STUFF(urm,CHARINDEX('|',urm),len(urm),'')+',',',',',_'))-LEN(STUFF(urm,CHARINDEX('|',urm),len(urm),'')+',')
select * from a
/*
color urm
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3 红色,绿色,蓝色|M,S,X
2 白色,蓝色|M,S,X
2 黑色,蓝色|M,S,X
3 红色,黑色,蓝色|M,S,X
2 红色,蓝色|M,S,X(5 row(s) affected)*/