none
Somar data Aleatoria. RRS feed

  • 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

     

    terça-feira, 12 de dezembro de 2006 12:06

Respostas

  • veja este exemplo


     set dateformat ymd

      Create 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 = 8

       If @Qtd <= 99
         Select @RangeStart = 1, @RangeEnd = 2

      
       while @RangeStart <= @RangeEnd
       begin
        Insert into @Table (Sort) Values (@RangeStart)
        Set @RangeStart = @RangeStart + 1
       End

       Return
     End

     Declare @CodOP int
     Declare @Qtde  int
     Declare @HAdd Int
     Declare @DataCriacao datetime

     Declare 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

     

     


     Declare

     Select Top 1 * From Ufn_ReturnDtAleatoria(100) Order By newID()


     

    Abs;

    terça-feira, 12 de dezembro de 2006 13:20

Todas as Respostas

  • veja este exemplo


     set dateformat ymd

      Create 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 = 8

       If @Qtd <= 99
         Select @RangeStart = 1, @RangeEnd = 2

      
       while @RangeStart <= @RangeEnd
       begin
        Insert into @Table (Sort) Values (@RangeStart)
        Set @RangeStart = @RangeStart + 1
       End

       Return
     End

     Declare @CodOP int
     Declare @Qtde  int
     Declare @HAdd Int
     Declare @DataCriacao datetime

     Declare 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

     

     


     Declare

     Select Top 1 * From Ufn_ReturnDtAleatoria(100) Order By newID()


     

    Abs;

    terça-feira, 12 de dezembro de 2006 13:20
  • Salve Marcelo.

    Depois de pequenos ajustes para minha adequação funcionou perfeitamente, valews mesmo

    terça-feira, 12 de dezembro de 2006 15:53