SQL语句更新时间字段为指定范围的随机时间

limfungsuen 2010-05-12 02:16:50
我写了个SQL存储过程,用来获得指定时间段内的一个随机日期。
我现在要更新表里的时间字段,把所有2008年的时间都更新为一个 指定时间段内的一个随机时间(格式:2009-11-17 14:00:28.393)


DECLARE @newDate VARCHAR(50);
EXEC rand_time '2009-01-01','2009-12-30', @newDate Output
select @newDate

通过以上语句,运行存储过程就可以获得在上面指定范围内的一个随机日期,比如2009-11-17 14:00:28.393

现在我要更新表里的时间字段CI_ModifyTime,如果CI_ModifyTime是在2008年的,就改为获得的那个随机时间。



UPDATE myTable
SET CI_ModifyTime=(?)
WHERE CharIndex(rtrim(CI_ModifyTime),'2008-')>0


这个逻辑可以这样写不?可以写的话,(?)部分要怎么写?

或者说用其他什么方式可以实现我说的需求...

在线等·············
...全文
813 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
htl258_Tony 2010-05-12
  • 打赏
  • 举报
回复
UPDATE myTable
SET CI_ModifyTime=dateadd(ss,abs(checksum(newid())%31449600), '2009-01-01 '+convert(varchar,getdate(),14) )
WHERE CharIndex(rtrim(CI_ModifyTime),'2008-')>0
SQL77 2010-05-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 limfungsuen 的回复:]
引用 2 楼 sql77 的回复:
declare @t1 datetime,@t2 datetime,@dd int
set @t1='2009-01-01'
set @t2='2009-12-30'
set @dd=datediff(dd,@t1,@t2)*rand()
select dateadd(dd,@dd,@t1)

这个是取随机时间,这个我已经写好了,而且区别到秒
我……
[/Quote]
哦,明白了,
UPDATE myTable
SET CI_ModifyTime=@NEWDATE
WHERE CharIndex(rtrim(CI_ModifyTime),'2008-')>0

???不过全更新成同样的时间了
SQL77 2010-05-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 limfungsuen 的回复:]
引用 2 楼 sql77 的回复:
declare @t1 datetime,@t2 datetime,@dd int
set @t1='2009-01-01'
set @t2='2009-12-30'
set @dd=datediff(dd,@t1,@t2)*rand()
select dateadd(dd,@dd,@t1)

这个是取随机时间,这个我已经写好了,而且区别到秒
我……
[/Quote]
哦,明白了,
UPDATE myTable
SET CI_ModifyTime=@NEWDATE
WHERE CharIndex(rtrim(CI_ModifyTime),'2008-')>0

???不过全更新成同样的时间了
limfungsuen 2010-05-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sql77 的回复:]
declare @t1 datetime,@t2 datetime,@dd int
set @t1='2009-01-01'
set @t2='2009-12-30'
set @dd=datediff(dd,@t1,@t2)*rand()
select dateadd(dd,@dd,@t1)
[/Quote]
这个是取随机时间,这个我已经写好了,而且区别到秒
我问的重心不是这里。

2楼的问答是正确的
[Quote=引用 1 楼 guguda2008 的回复:]
把存储过程改成函数就行了
[/Quote]
能给个示例吗?我函数没写过,你就弄个简单的格式就行···定义··返回值··赋值···
SQL77 2010-05-12
  • 打赏
  • 举报
回复
declare @t1 datetime,@t2 datetime,@dd int
set @t1='2009-01-01'
set @t2='2009-12-30'
set @dd=datediff(dd,@t1,@t2)*rand()
select dateadd(dd,@dd,@t1)
guguda2008 2010-05-12
  • 打赏
  • 举报
回复
把存储过程改成函数就行了

27,580

社区成员

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

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