Usuário com melhor resposta
Somar data Aleatoria.

Pergunta
-
Bom dia. Tenho uma tabela com quantidade e data de criação, porem sem data de termino que é justamente o que preciso colocar, o problema é que a data de termino dever ter valore aleatorios seguinto a seguinte regra:
Quando a quantidade form maior que 100 deve-se ter uma data de termino com um acrescima aleatorio entre 5 ou 8 horas sobre a date de criação.
Se a quantidade for inferiror a 100 esse acrescimo deve ser entre 1 e 2 horas.gostaria de saber se é possivel fazer alguma instrução que automatize essa atualização, pois tenho 4212 registros para alterar.
Segue modelo da tabela.
CodOP | Qtde | DataCriacao | DataTermino
1 10 2006-18-01 09:47:00
30 180 2005-21-09 11:13:00
Respostas
-
veja este exemplo
set dateformat ymdCreate Table #Exemplo (CodOP Int , Qtde Int , DataCriacao datetime , DataTermino datetime)
insert into #Exemplo (CodOP, Qtde,DataCriacao) Values (1,10,'2006-01-18 09:47:00')
insert into #Exemplo (CodOP, Qtde,DataCriacao) Values (30,180,'2005-09-21 11:13:00')Select * From #Exemplo
alter Function Ufn_ReturnDtAleatoria (@Qtd Int)
Returns @Table Table (Sort int)
As
Begin
Declare @Ret Int
Declare @RangeStart Int
Declare @RangeEnd Int
If @Qtd >= 100
Select @RangeStart = 5, @RangeEnd = 8If @Qtd <= 99
Select @RangeStart = 1, @RangeEnd = 2
while @RangeStart <= @RangeEnd
begin
Insert into @Table (Sort) Values (@RangeStart)
Set @RangeStart = @RangeStart + 1
EndReturn
EndDeclare @CodOP int
Declare @Qtde int
Declare @HAdd Int
Declare @DataCriacao datetimeDeclare TLoop CURSOR FOR SELECT CodOP, Qtde,DataCriacao FROM #Exemplo
Open TLoop
Fetch Next From TLoop Into @CodOP,@Qtde,@DataCriacao
While @@Fetch_Status = 0
Begin
Select Top 1 @HAdd = Sort From Dbo.Ufn_ReturnDtAleatoria(@Qtde) Order By NewID()
Select @CodOP CodOP, @Qtde Qtde, @DataCriacao DataCriacao,
DataFim = DateAdd(hh,@HAdd,@DataCriacao)Fetch Next From TLoop Into @CodOP,@Qtde,@DataCriacao
End
Close TLoop
Deallocate TLoop
DeclareSelect Top 1 * From Ufn_ReturnDtAleatoria(100) Order By newID()
Abs;
Todas as Respostas
-
veja este exemplo
set dateformat ymdCreate Table #Exemplo (CodOP Int , Qtde Int , DataCriacao datetime , DataTermino datetime)
insert into #Exemplo (CodOP, Qtde,DataCriacao) Values (1,10,'2006-01-18 09:47:00')
insert into #Exemplo (CodOP, Qtde,DataCriacao) Values (30,180,'2005-09-21 11:13:00')Select * From #Exemplo
alter Function Ufn_ReturnDtAleatoria (@Qtd Int)
Returns @Table Table (Sort int)
As
Begin
Declare @Ret Int
Declare @RangeStart Int
Declare @RangeEnd Int
If @Qtd >= 100
Select @RangeStart = 5, @RangeEnd = 8If @Qtd <= 99
Select @RangeStart = 1, @RangeEnd = 2
while @RangeStart <= @RangeEnd
begin
Insert into @Table (Sort) Values (@RangeStart)
Set @RangeStart = @RangeStart + 1
EndReturn
EndDeclare @CodOP int
Declare @Qtde int
Declare @HAdd Int
Declare @DataCriacao datetimeDeclare TLoop CURSOR FOR SELECT CodOP, Qtde,DataCriacao FROM #Exemplo
Open TLoop
Fetch Next From TLoop Into @CodOP,@Qtde,@DataCriacao
While @@Fetch_Status = 0
Begin
Select Top 1 @HAdd = Sort From Dbo.Ufn_ReturnDtAleatoria(@Qtde) Order By NewID()
Select @CodOP CodOP, @Qtde Qtde, @DataCriacao DataCriacao,
DataFim = DateAdd(hh,@HAdd,@DataCriacao)Fetch Next From TLoop Into @CodOP,@Qtde,@DataCriacao
End
Close TLoop
Deallocate TLoop
DeclareSelect Top 1 * From Ufn_ReturnDtAleatoria(100) Order By newID()
Abs;
-