create proc Proc_RandDateTime @OutRandDate datetime output as begin declare @RandDate datetime declare @strDate varchar(8) select @strDate = (CHAR((CONVERT(int,RAND()*1000)%10)+48) +CHAR((CONVERT(int,RAND()*1000)%10)+48) +CHAR((CONVERT(int,RAND()*1000)%10)+48) +CHAR((CONVERT(int,RAND()*1000)%10)+48)) declare @year int set @year = convert(int,@strDate) declare @month int set @month = (convert(int,(rand()*1000)) % 12 + 1) declare @day int if @year <= 1900 begin set @year = 1900 set @strDate = convert(char(4),year(1900-01-01)) end if (((@year % 4) = 0 and (@year % 100) != 0 ) or ( (@year % 100) = 0 and (@year % 400) = 0 )) and (@month = 2) begin set @day = convert(int,(rand()*1000))%28 + 1 end else if ((@month = 1) or (@month = 3) or (@month = 5) or (@month = 7) or (@month = 8) or (@month = 10) or (@month = 12)) begin set @day = convert(int,(rand()*1000))%31 + 1 end else begin set @day = convert(int, (rand()*1000))%30 + 1 end set @strDate = (@strDate + char(@month/10 + 48 ) + char(@month%10 + 48 ) + char(@day/10 + 48 ) + char(@day%10 + 48 )) set @RandDate = convert(datetime,@strDate) select @OutRandDate = @RandDate end