Ir para conteúdo
Entre para seguir isso  
Luthien

Gerar Hora Aleatória dentro de um intervalo

Recommended Posts

Boa noite,

 

Preciso gerar uma hora aleatória entre a hora de entrada de um comprovante e 23:59:59. A função que fiz está gerando um monte de horas '00:00:00' e maiores que 23:59:59, como 35:00:00: 29:00:00. Não tenho ideia do pq disso estar acontecendo.

delimiter $
create procedure InsereDadosRecibo(idcomp int)
begin    
    declare vDataEntrada date;
    declare vHoraEntrada, vHoraSaida time;
    declare vIDCat int;
    declare vPlacacar varchar(45);
    declare vTaxaHoraria double;
select Comprovante.DataEntrada,
Comprovante.HoraEntrada,
Comprovante.HoraEntrada  + floor(time_to_sec(Comprovante.HoraEntrada) + (rand()*(86400-time_to_sec(Comprovante.HoraEntrada)))),
Comprovante.IDCategoria,
Comprovante.PlacaCarro
into vDataEntrada,vHoraEntrada,vHoraSaida,vIDCat,vPlacacar
from Comprovante where Comprovante.IDComprovante = idcomp;
select Categoria.TaxaHoraria
into vTaxaHoraria from Categoria where Categoria.IDCategoria = vIDCat;
insert into estacionamento.Recibo(DataEntrada,HoraEntrada,HoraSaida,IDCategoria,Placacarro,ValorPago)
values(vDataEntrada, vHoraEntrada, vHoraSaida ,vIDCat, vPlacaCar,(((time_to_sec(vHoraSaida)-time_to_sec(vHoraEntrada))/60)/30)*vTaxaHoraria);
end
$

86400 é 24 horas em segundos. Alguém poderia me ajudar? Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver!

delimiter $
create procedure InsereDadosRecibo(idcomp int)
begin    
    declare vDataEntrada date;
    declare vHoraEntrada, vHoraSaida time;
    declare vIDCat int;
    declare vPlacacar varchar(45);
    declare vTaxaHoraria double;
select Comprovante.DataEntrada,
Comprovante.HoraEntrada,
sec_to_time(floor(time_to_sec(Comprovante.HoraEntrada) + (rand()*(86400-time_to_sec(Comprovante.HoraEntrada))))),
Comprovante.IDCategoria,
Comprovante.PlacaCarro
into vDataEntrada,vHoraEntrada,vHoraSaida,vIDCat,vPlacacar
from Comprovante where Comprovante.IDComprovante = idcomp;
select Categoria.TaxaHoraria
into vTaxaHoraria from Categoria where Categoria.IDCategoria = vIDCat;
insert into estacionamento.Recibo(DataEntrada,HoraEntrada,HoraSaida,IDCategoria,Placacarro,ValorPago)
values(vDataEntrada, vHoraEntrada, vHoraSaida ,vIDCat, vPlacaCar,(((time_to_sec(vHoraSaida)-time_to_sec(vHoraEntrada))/60)/30)*vTaxaHoraria);
end
$

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por Highlander1901
      Senhores, buenas... não consigo efetuar esse SELECT, e já quebrei a cabeça pra dar certo. Podem me ajudar?
       
      SELECT
               "A"."CCUSTO" as "Célula",
               "A"."IDCONTR" as "Matrícula",
               "A"."NOME",
               "A"."SINDICATO",
               "A"."DESCEVENTO",
               "A"."LOCAL",
               (HOUR("A"."JAN") + (MINUTE("A"."JAN") / 60)) as "Mes Anterior",
               (HOUR("A"."FEV") + (MINUTE("A"."FEV") / 60)) as "Mes Atual",
               ((HOUR("A"."JAN") + (MINUTE("A"."JAN") / 60)) -(HOUR("A"."FEV") + (MINUTE("A"."FEV") / 60))) as "Crescimento",
               (MINUTE("A"."FEV") / 60) as "Minutos"
      FROM  "BD_HORAS" AS  "A" 
      WHERE     "A"."CCUSTO"  = '113'
       OR    "A"."CCUSTO"  = '432'
       
      Detalhes de erro:
      Qualquer uma das opções abaixo poderia ser a possibilidade para o erro:

      1. Poderia haver tipos incompatíveis de dados em um dos lados do operador comparador. Nesse caso, converta as colunas e tente novamente.

      2. Não há função correspondente ao nome  e argumento fornecidos. Você pode precisar adicionar conversões do tipo explícita.   Obs.: Sempre utilizei esse código, o que alterava era apenas o as colunas "JAN" e "FEV", dependendo do avanço dos meses.
       
      HEEEELP!
    • Por Vinny Oliveira
      Bom dia pessoal!
       
      Devido as mudanças no horário de verão que estão ocorrendo atualmente, algumas plataformas adiantaram incorretamente o horário.
      O comando "date" do php está retornando o horário adiantado, sendo que o servidor (windows) está com a hora e timezone(php.ini e clock do windows) correta.
      De onde o PHP está buscando esse horário? Como corrigir?
    • Por Rodymb
      Bom dia!
       
      Preciso fazer um update em um campo do tipo  int de uma tabela para corrigir o horário e a informação que estou buscando está em um campo do tipo datetime de outra tabela. Fiz um update da seguinte forma:
       
      update zan_m00 set m00zc=(SELECT convert(varchar(11),dataemissao,114) FROM tab_nota_header where dataemissao between '2018-08-01 00:00:00' and '2018-08-01 23:59:59' and numpdv=111 and codloja=1 and numnota=74841) where m00af='2018-08-01' and m00za=1 and m00ac=111 and m00ad=69614
       
      Esse update retornou a seguinte mensagem:
      Falha ao converter o varchar valor '11:56:57:00' para o tipo de dados int.
       
      No lugar onde está varchar experimentei usar int, entretanto, ele faz o update somando todo o conteúdo do campo, também usei o CAST e o problema é o mesmo.
      Se eu fizer somente o select, ele retorna pra mim somente a hora, que é o que preciso, mas aí tem outro problema, no campo tipo int a hora é tudo junto 115657 e nesse select ele retorna 11:56:57.
       
      Existe alguma forma de fazer esse update da forma que preciso?
       
    • Por Programador Legal Olha Só
      Escreva um algoritmo que leia 6 números e os armazene em um vetor.
      Utilize a função rand para gerar 6 números aleatórios que sejam armazenados em um vetor
      Compare os dois vetores e informe ao usuário se ele acertou ou nao os numeros
      Os números digitados podem ser de 1 a 60, assim como os números gerados.
      Utilize funções para cada algoritmo de seu programa.
    • Por Julio Cavallari
      Tenho um script que faz o sorteio de nomes aleatórios. O problema é que meu cliente quer tem nomes fixos para sem sorteados também. Até ai tudo certo. Mas se o número de ganhadores que ele escolheu for maior que o número de nomes fixos meu script entra em loop, e não consigo achar uma solução. Alguém poderia me ajudar?
      for($j = 0; $j < $numGanhadores; $j++){ $index = mt_rand(0, $numParticipantes); if(!$ganhadoresFixos){ if(!in_array($nomes[$index], $ganhadoresArray)){ $ganhadores[] = (object)[ "nome" => $nomes[$index]]; $ganhadoresArray[] = $nomes[$index]; $nomesGanhadores = implode(",", $ganhadoresArray); }else{ $j--; } }else{ if(array_intersect($nomes, $ganhadoresFixos)){ if(in_array($nomes[$index], $ganhadoresFixos) && !in_array($nomes[$index], $ganhadoresArray)){ $ganhadores[] = (object)[ "nome" => $nomes[$index]]; $ganhadoresArray[] = $nomes[$index]; $nomesGanhadores = implode(",", $ganhadoresArray); }else{ $j--; } }else{ if(!in_array($nomes[$index], $ganhadoresArray)){ $ganhadores[] = (object)[ "nome" => $nomes[$index]]; $ganhadoresArray[] = $nomes[$index]; $nomesGanhadores = implode(",", $ganhadoresArray); }else{ $j--; } } } } O ponto do loop é mais especificamente aqui:
      if(in_array($nomes[$index], $ganhadoresFixos) && !in_array($nomes[$index], $ganhadoresArray)){ $ganhadores[] = (object)[ "nome" => $nomes[$index]]; $ganhadoresArray[] = $nomes[$index]; $nomesGanhadores = implode(",", $ganhadoresArray); }else{ $j--; } Preciso que ele veja se existem nomes na lista de participantes e na lista de vencedores fixos que ainda não foram selecionados, e se não existir ele executar o padrão
      if(!in_array($nomes[$index], $ganhadoresArray)){ $ganhadores[] = (object)[ "nome" => $nomes[$index]]; $ganhadoresArray[] = $nomes[$index]; $nomesGanhadores = implode(",", $ganhadoresArray); }else{ $j--; }  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.