怎样产生一个随机时间,产生的随机时间不大于当前时间,并且不小于一个指定时间。就是:getdate()>随机时间>指定时间。这个时间如何产生呢?

解决方案 »

  1.   

    declare @begin datetime
    set @begin = '2006-11-01'
    select dateadd(day,rand() * datediff(day,@begin,getdate()),@begin)
      

  2.   

    select convert(char(10),dateadd(dd,-cast(rand()*9999 as int),getdate()),120)
      

  3.   

    CREATE VIEW GetNow
    AS
    SELECT NOW = GETDATE()
    GOCREATE VIEW GetRand
    AS
    SELECT Rnd = RAND()
    GOCREATE FUNCTION MakeRndDate(@MinDate DATETIME)
    RETURNS DATETIME
    AS
    BEGIN
    DECLARE @i INT
    DECLARE @re DATETIME
    DECLARE @NOW DATETIME
    DECLARE @RND FLOAT SELECT @NOW = NOW FROM GETNOW
    SET @i = DATEDIFF(DAY, @NOW, @MinDate) + 1
    SET @re = @MinDate
    WHILE @re <= @MinDate
    BEGIN
    SELECT @RND = Rnd FROM GETRAND
    SET @re = DATEADD(DAY, @RND * @i, @NOW)
    END
    RETURN @re
    END
    GOSELECT DBO.MAKERNDDATE('2005/12/1')
    GODROP VIEW dbo.GetNow
    DROP VIEW dbo.GetRand
    DROP FUNCTION dbo.MakeRndDate
      

  4.   

    declare @a int
    set @a=datediff(day,'2006.01.01',getdate())
    set rowcount @a
    select identity(int,1,1) as id into # from sysobjects a,sysobjects b 
    set rowcount 0
    select top 1 dateadd(day,id,'2006.01.01') from # order by newid()
      

  5.   

    declare @begin datetime
    set @begin = '2006-11-01'
    select dateadd(day,rand() * datediff(day,@begin,getdate()),@begin)
    是时间不是日期哦后面的HH:MM:SS也要不同的
      

  6.   

    declare @begin datetime
    set @begin = '2006-11-01'
    select dateadd(millisecond,rand() * datediff(millisecond,@begin,getdate()),@begin)
      

  7.   

    以上精确到毫秒,一般到秒够了declare @begin datetime
    set @begin = '2006-11-01'
    select dateadd(second,rand() * datediff(second,@begin,getdate()),@begin)需要注意如果开始日期和现在相差太大,可能会溢出,那就最好降低精度