首页 新闻 会员 周边 捐助

新手求助!急。。帮忙写个sql的update语句

0
悬赏园豆:60 [已解决问题] 解决于 2010-04-29 20:01

新手求助!急。。
resource表中的lbbm字段为 '03-09-01'
我要将lbbm字段数据中的“-”去掉,后放到tab1表的code字段中,并统计 “-”的次数+1放到tab1表的lbnum字段中。是sql server的请帮忙写一下这条update语句,非常感谢!

问题补充: 谁能帮忙写个完整的语句么?
老月花的主页 老月花 | 初学一级 | 园豆:175
提问于:2010-04-29 00:30
< >
分享
最佳答案
0

这个是关联表的批量更新,可以参考下:

http://www.cnblogs.com/downmoon/archive/2007/12/29/1019832.html


create table [resource]
(pkid
int identity(1,1),
lbbm
nvarchar(20),
other
int
)
go
insert [Resource]
select '03-09-01',cast(ceiling(rand() * 100) as int)
union all
select '05-06-07',cast(ceiling(rand() * 100) as int)

select * from [Resource]

create table [tab1]
(pkid
int identity(1,1),
code
nvarchar(20),
lbnum
int
)
go

insert tab1
select '',0
union all
select '',0

select * from tab1

update tab1 set code=replace(r.lbbm,'-',''),
lbnum
=len(r.lbbm)-len(replace(r.lbbm,'-','')-1)
from [Resource] r inner join tab1 t on r.pkid=t.pkid

select * from tab1


--结果
--
pkid code lbnum
--
1 030901 3
--
2 050607 3

 

收获园豆:40
邀月 | 高人七级 |园豆:25475 | 2010-04-29 16:49
其他回答(4)
0

嗯...用代码实现的话,就好写多了。

Astar | 园豆:40805 (高人七级) | 2010-04-29 08:43
0

如果你必须在SQL上实现的话:

1、首先定义自定义函数〔处理03-09-01这样的数据称为030901、处理-的个数+1〕

2、update tab1 set tab1.code= 自定义函数(a.lbbm) ,tab1.lbnum= 自定义函数(a.lbbm) from resource a where a.id=tab1.id

如果不是程序需要进程重复性的这种操作(比如就是更新一批数据),还是推荐写个程序更新得了。

收获园豆:10
邢少 | 园豆:10926 (专家六级) | 2010-04-29 08:56
0

declare @str varchar(10)
set @str='03-09-01'
select replace(@str,'-',''),len(@str)-len(replace(@str,'-','')-1)
上面是例子
update tab
set code=replace(a.colname,'-',''),lbnum=len(a.colnam)-len(replace(a.colname,'-','')-1)
from resource a
where ....

你的语句应该是类似这个的。

收获园豆:10
清海扬波 | 园豆:825 (小虾三级) | 2010-04-29 11:14
这个可以
支持(0) 反对(0) 上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2010-04-29 12:32
0

用Linq或数据集处理吧,你这个要处理的数据量应该不小吧,SQL完成一行都要好多句代码,跑起来会很慢的。

伊末 | 园豆:215 (菜鸟二级) | 2010-04-29 11:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册