日期:2014-05-19  浏览次数:20742 次

如何插入指定时间段内的随机时间呢?
insert   into   T_user(logname,sub_date)
select   myname,@mydate   from   test  


@mydate   这个日期要在一个给定时间段内的随机日期值,如:2007-6-1至getdate(),

只要在这时间段内不重复即可.上面的sql语句只是我随便写的,用来描述问题,即在一张表内要插入一个结果集,但日期一列是指定一个时间段内的随机日期.

------解决方案--------------------
declare @Date_start datetime
declare @Date_end datetime
set @Date_start= '2006-06-01 '
set @Date_end=getdate()

select 时间=dateadd(minute,abs(checksum(newid()))%(datediff(minute,@Date_start,@Date_end)+1),@Date_start)
into t

select * from t

drop table t
------解决方案--------------------
Create Table test(myname Varchar(10))
Insert test Select 'A '
Create Table T_user(logname Varchar(10),sub_date DateTime)
GO
Declare @I Int, @mydate DateTime
Select @I = DateDiff(dd, '2007-06-01 ', GetDate())
Select @mydate = DateAdd(dd, Convert(Int, Rand(CheckSUM(NewID())) * @I), '2007-06-01 ')

insert into T_user(logname,sub_date)
select myname,@mydate from test

Select @mydate = DateAdd(dd, Convert(Int, Rand(CheckSUM(NewID())) * @I), '2007-06-01 ')
insert into T_user(logname,sub_date)
select myname,@mydate from test

Select * From T_user
GO
Drop Table T_user, test
--Result
/*
logname sub_date
A 2007-06-17 00:00:00.000
A 2007-06-26 00:00:00.000
*/
------解决方案--------------------
不一样?
declare @a table(logname varchar(20), sub_date smalldatetime)

declare @test table(logname varchar(20))
insert @test select 'Lee '
union all select 'Mr.Z '
union all select 'Jack '

declare @s datetime,@e datetime, @i int
set @s= '2007-01-01 '
set @e=getdate()
set @i=datediff(day,@s,@e)
insert into @a(logname,sub_date) select logname,dateadd(day,rand(checksum(newid()))*@i,@s) from @test

select * from @a
------解决方案--------------------
我又改进了下,直接update用这个也可以了

update a1 set d = dateadd(d,convert(int,RAND(left(replace(replace(replace(replace(replace(replace(left(newid(),5), 'a ', ' '), 'b ', ' '), 'c ', ' '), 'd ', ' '), 'e ', ' '), 'f ', ' '),5))*datediff(dd,getdate(), '2007-6-1 ')),getdate())