存储过程修改数据库数据的问题~~~~~~~

hf515 2006-10-11 12:44:09
数据库里大概有50万条数据
主要有两个字段 :上次检验时间 / 下次检验时间
怎么样才能实现修改这个2个时间实现:

比如:
上次检验时间=9/22/2004 下次检验时间=9/22/2005
要修改成 上次检验时间=9/22/2006 下次检验时间=9/22/2007
前后2个年份间隔的年数周期不变

并且修改后的上次检验时间<修改时的当前时间;下次检验时间<修改时的当前时间
就是说如果:上次检验时间=11/22/2004 下次检验时间=11/22/2005
应该改成 上次检验时间=11/22/2005 下次检验时间=11/22/2006
...全文
195 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
simonhehe 2006-10-11
  • 打赏
  • 举报
回复
按照你想要的,
直接对年+1不可以吗?
或者是我没明白你的意思?
hf515 2006-10-11
  • 打赏
  • 举报
回复
谢谢楼上各位
libin_ftsafe(子陌红尘:当libin告别ftsafe) 的方法成功了
子陌红尘 2006-10-11
  • 打赏
  • 举报
回复
declare @t table(上次检验时间 datetime,下次检验时间 datetime)
insert into @t values('9/22/2004','9/22/2005')
insert into @t values('9/22/2002','9/22/2004')

declare @yy int,@y varchar(200)

update @t
set
@yy = datediff(year,上次检验时间,下次检验时间),
@y = case
when right(convert(char(10),上次检验时间,120),5)<right(convert(char(10),getdate(),120),5)
then rtrim(year(getdate()))+right(convert(char(10),上次检验时间,120),6)
else
rtrim(year(getdate())-1)+right(convert(char(10),上次检验时间,120),6)
end,
上次检验时间 = @y,
下次检验时间 = dateadd(year,@yy,@y)

select * from @t

/*
上次检验时间 下次检验时间
-------------------------- --------------------------
2006-09-22 00:00:00.000 2007-09-22 00:00:00.000
2006-09-22 00:00:00.000 2008-09-22 00:00:00.000
*/
dulei115 2006-10-11
  • 打赏
  • 举报
回复
declare @year int
update 表
set @year=datediff(year,下次检验时间,getdate()) + case when month(下次检验时间) * 31 + day(下次检验时间) > month(getdate()) * 31 + day(getdate()) then 0 else 1 end,
上次检验时间=dateadd(year,@year,上次检验时间),
下次检验时间=dateadd(year,@year,下次检验时间)
dulei115 2006-10-11
  • 打赏
  • 举报
回复
declare @year int
update 表
set @year=datediff(year,下次检验时间,getdate()) - case when month(下次检验时间) * 31 + day(下次检验时间) <= month(getdate()) * 31 + day(getdate()) then 0 else 1 end,
上次检验时间=dateadd(year,@year,上次检验时间),
下次检验时间=dateadd(year,@year,下次检验时间)
子陌红尘 2006-10-11
  • 打赏
  • 举报
回复
declare @year int

update 表
set
@year=datediff(year,上次检验时间,下次检验时间),
上次检验时间=dateadd(year,@year,上次检验时间),
下次检验时间=dateadd(year,@year,下次检验时间)
hf515 2006-10-11
  • 打赏
  • 举报
回复
错了 是改成 上次检验时间=9/22/2006 下次检验时间=9/22/2008

hf515 2006-10-11
  • 打赏
  • 举报
回复
谢谢楼上的
可是有些数据像 上次检验时间=9/22/2002 下次检验时间=9/22/2004
就不能直接加1了
像上面的数据检验周期是2年,月日小于当前10月11日
就要改成 上次检验时间=9/22/2005 下次检验时间=9/22/2007
子陌红尘 2006-10-11
  • 打赏
  • 举报
回复
declare @year int
set @year=2

update 表
set
上次检验时间=dateadd(year,@year,上次检验时间),
下次检验时间=dateadd(year,@year,下次检验时间)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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