SQL一个字段中某几个字更新

时间:2021-02-27 15:34:53
1.如 表 F 字段B 数据是王1,王2,王3。。。。。王N,怎么用UPDATE更新成A1,A2,A3..........AN的

2.表F 字段B 数据是王,王,王,王。。。。。王 怎么用UPDATE更新成W1,W2,W3.......WN的

本人是菜鸟,求大神帮帮忙。

16 个解决方案

#1


update f
set b = replace(b,'王','A')

#2



select replace(字段B,'王','A') into #temp from 表F  

update 表F a  set a.字段B=b.字段B  from 表F a ,#temp  b  

#3



declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t set [c1]=replace([c1],'王','A')
update @t set [c2]='w'+ltrim(id)

select * from @t
/*
id          c1   c2
----------- ---- ------
1           A1   w1
2           A2   w2
3           A3   w3
4           AN   w4
*/

--id不连续的话用row_number() 生成连续id号即可。

#4



--不好意思,上面有误


IF  exists (select 1  from  sysobjects where name='[F]'and type='p')  
drop table  [F]
go
create table F (B varchar(4))
insert  [F]
select '王1'union all
select '王2'union all
select '王3'union all
select '王4'union all
select '王5'

--  select  * from  F
--1
update F set B=replace(B,'A','王')  
--2


select B=replace(B,'王','A') into #temp from F  

update F set B=b.B  from F,#temp  b

/*
   B
   王1
   王2
   王3
   王4
   王5
(所影响的行数为 5 行)
*/

#5


引用 3 楼  的回复:
SQL code

declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t se……
+1

#6


declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'


UPDATE @t
SET [c1] = REPLACE([c1],'王','A'),
[c2] = REPLACE([c2],'王','W'+LTRIM(id))

#7


-----------------------------------------------------------------
/**
 * 测试 3 楼 报错,也许是我理解错了,望指点
 * 测试row_number()函数
 * 2012-8-14
 * 
**/
-----------------------------------------------------------------
declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t set [c1]=replace([c1],'王','A')
update @t set [c2]='w'+ltrim(ROW_NUMBER()OVER(ORDER BY id))

SELECT * FROM @t

------------------------------------------------------

报错:
     消息 4108,级别 15,状态 1,第 9 行
开窗函数只能出现在 SELECT 或 ORDER BY 子句中。

#8


-----------------------------------------------------------------
/**
 * 测试 3楼 ,也许我理解错了,望指点
 * 测试row_number()函数
 * 2012-8-14
 * 
**/
-----------------------------------------------------------------
declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t set [c2]='w'+ltrim(ROW_NUMBER()OVER(ORDER BY id))

SELECT * FROM @t

报错:
消息 4108,级别 15,状态 1,第 9 行
开窗函数只能出现在 SELECT 或 ORDER BY 子句中。

#9


引用 3 楼  的回复:
SQL code

declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t se……



-----------------------------------------------------------------
/**
 * 测试 3 楼 ,也许理解错了,没出来,望指点
 * 测试row_number()函数
 * 2012-8-14
 * 
**/
-----------------------------------------------------------------
declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'


update @t set [c2]='w'+ltrim(ROW_NUMBER()OVER(ORDER BY id))

SELECT * FROM @t

报错:

消息 4108,级别 15,状态 1,第 9 行
开窗函数只能出现在 SELECT 或 ORDER BY 子句中。

#10



--假设ID不连续
declare @t table(id int,[c1] varchar(4),[c2] varchar(6))
insert @t
select 2,'王1','王' union all
select 4,'王2','王' union all
select 7,'王3','王' union all
select 10,'王N','王'

update @t set [c1]=replace([c1],'王','A')
update @t set [c2]='W'+ltrim(b.rid)
from @t a left join (select id,row_number() over (order by id) as rid from @t) b
on a.id=b.id

select * from @t
/*
id          c1   c2
----------- ---- ------
2           A1   W1
4           A2   W2
7           A3   W3
10          AN   W4
*/

#11


replace 才是王道,row_number()是2005里面才有的

#12


该回复于2012-08-15 10:27:53被版主删除

#13


还是 replace 好用 但是如果我想指定位置的数据被替换应该怎么弄呢
比如 

表 table
name  phone
1     313464614
2     35464645
3     2464674
4     25465464
5     4514964

把phone的第一位全部替换成9
求SQL

#14


update table set phone=replace(phone,substr(phone,1,1),'9')  自己高出来了 呵呵

#15


update F SET B=replace(B,'王','A')

#16


都是用replace吗?

那补充请教个问题:

比如 想更新A字段的1-4位 是一个变量值,5-8位是另外一个变量值,如何UPDATE?

#1


update f
set b = replace(b,'王','A')

#2



select replace(字段B,'王','A') into #temp from 表F  

update 表F a  set a.字段B=b.字段B  from 表F a ,#temp  b  

#3



declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t set [c1]=replace([c1],'王','A')
update @t set [c2]='w'+ltrim(id)

select * from @t
/*
id          c1   c2
----------- ---- ------
1           A1   w1
2           A2   w2
3           A3   w3
4           AN   w4
*/

--id不连续的话用row_number() 生成连续id号即可。

#4



--不好意思,上面有误


IF  exists (select 1  from  sysobjects where name='[F]'and type='p')  
drop table  [F]
go
create table F (B varchar(4))
insert  [F]
select '王1'union all
select '王2'union all
select '王3'union all
select '王4'union all
select '王5'

--  select  * from  F
--1
update F set B=replace(B,'A','王')  
--2


select B=replace(B,'王','A') into #temp from F  

update F set B=b.B  from F,#temp  b

/*
   B
   王1
   王2
   王3
   王4
   王5
(所影响的行数为 5 行)
*/

#5


引用 3 楼  的回复:
SQL code

declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t se……
+1

#6


declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'


UPDATE @t
SET [c1] = REPLACE([c1],'王','A'),
[c2] = REPLACE([c2],'王','W'+LTRIM(id))

#7


-----------------------------------------------------------------
/**
 * 测试 3 楼 报错,也许是我理解错了,望指点
 * 测试row_number()函数
 * 2012-8-14
 * 
**/
-----------------------------------------------------------------
declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t set [c1]=replace([c1],'王','A')
update @t set [c2]='w'+ltrim(ROW_NUMBER()OVER(ORDER BY id))

SELECT * FROM @t

------------------------------------------------------

报错:
     消息 4108,级别 15,状态 1,第 9 行
开窗函数只能出现在 SELECT 或 ORDER BY 子句中。

#8


-----------------------------------------------------------------
/**
 * 测试 3楼 ,也许我理解错了,望指点
 * 测试row_number()函数
 * 2012-8-14
 * 
**/
-----------------------------------------------------------------
declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t set [c2]='w'+ltrim(ROW_NUMBER()OVER(ORDER BY id))

SELECT * FROM @t

报错:
消息 4108,级别 15,状态 1,第 9 行
开窗函数只能出现在 SELECT 或 ORDER BY 子句中。

#9


引用 3 楼  的回复:
SQL code

declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'

update @t se……



-----------------------------------------------------------------
/**
 * 测试 3 楼 ,也许理解错了,没出来,望指点
 * 测试row_number()函数
 * 2012-8-14
 * 
**/
-----------------------------------------------------------------
declare @t table(id int identity(1,1),[c1] varchar(4),[c2] varchar(6))
insert @t
select '王1','王' union all
select '王2','王' union all
select '王3','王' union all
select '王N','王'


update @t set [c2]='w'+ltrim(ROW_NUMBER()OVER(ORDER BY id))

SELECT * FROM @t

报错:

消息 4108,级别 15,状态 1,第 9 行
开窗函数只能出现在 SELECT 或 ORDER BY 子句中。

#10



--假设ID不连续
declare @t table(id int,[c1] varchar(4),[c2] varchar(6))
insert @t
select 2,'王1','王' union all
select 4,'王2','王' union all
select 7,'王3','王' union all
select 10,'王N','王'

update @t set [c1]=replace([c1],'王','A')
update @t set [c2]='W'+ltrim(b.rid)
from @t a left join (select id,row_number() over (order by id) as rid from @t) b
on a.id=b.id

select * from @t
/*
id          c1   c2
----------- ---- ------
2           A1   W1
4           A2   W2
7           A3   W3
10          AN   W4
*/

#11


replace 才是王道,row_number()是2005里面才有的

#12


该回复于2012-08-15 10:27:53被版主删除

#13


还是 replace 好用 但是如果我想指定位置的数据被替换应该怎么弄呢
比如 

表 table
name  phone
1     313464614
2     35464645
3     2464674
4     25465464
5     4514964

把phone的第一位全部替换成9
求SQL

#14


update table set phone=replace(phone,substr(phone,1,1),'9')  自己高出来了 呵呵

#15


update F SET B=replace(B,'王','A')

#16


都是用replace吗?

那补充请教个问题:

比如 想更新A字段的1-4位 是一个变量值,5-8位是另外一个变量值,如何UPDATE?