一个更新的语句

tinkou 2008-11-26 03:54:59
现在数据库的表结构如下
部门编码 级别
241400000 3
241635100 5
246320000 4

这样的结构现在要判断
部门编码列中后五位的0的个数=5的级别更新成3级
部门编码列中后五位的0的个数 >=3 and <5 的更新成4级
部门编码列中后五位的0的个数 <3 的更新成5级

请问这样的update 语句怎么写啊?
...全文
50 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bibidbzfish 2008-11-26
  • 打赏
  • 举报
回复
Update Tb1 Set 级别 = Case Len(Convert(int,Reverse(Right(Rtrim(部门编号),5))))
when 1 Then Case when Convert(int,Reverse(Right(Rtrim(deptid),5))) = 0 Then 3 Else 4 End
When 2 Then 4
when 3 Then 5
when 4 Then 5
when 5 Then 5 End
dawugui 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tinkou 的回复:]
大哥太感谢您了
[/Quote]
不用谢,结帖给分就行了.
tinkou 2008-11-26
  • 打赏
  • 举报
回复
大哥太感谢您了
dawugui 2008-11-26
  • 打赏
  • 举报
回复
create table tb(部门编码 varchar(20), 级别 int)
insert into tb values('241400000' , 0)
insert into tb values('241635100' , 0)
insert into tb values('246320000' , 0)
go

update tb set 级别 =
case when left(reverse(部门编码),5) = '00000' then 3
when left(reverse(部门编码),4) = '0000' and substring(reverse(部门编码),5,1) <> '0' then 4
when (left(reverse(部门编码),3) = '000' or left(reverse(部门编码),2) = '00' or left(reverse(部门编码),1) = '0') and substring(reverse(部门编码),4,1) <> '0' then 5
end

select * from tb

drop table tb

/*
部门编码 级别
-------------------- -----------
241400000 3
241635100 5
246320000 4

(所影响的行数为 3 行)
*/
dawugui 2008-11-26
  • 打赏
  • 举报
回复
update tb set 级别 = 
case when left(reverse(部门编码),5) = '00000' then 3
when left(reverse(部门编码),4) = '0000' and substring(reverse(部门编码),5,1) <> '0' then 4
when (left(reverse(部门编码),3) = '000' or left(reverse(部门编码),2) = '00' or left(reverse(部门编码),1) = '0') and substring(reverse(部门编码),4,1) <> '0' then 5
end
tinkou 2008-11-26
  • 打赏
  • 举报
回复
怎么个case when 啊,请赐教
dawugui 2008-11-26
  • 打赏
  • 举报
回复
case when

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧