Ir para conteúdo
asacap1000

Calculo de datas e horas

Recommended Posts

Galera preciso de uma ajuda, não sei mais nem como procurar a cabeça está dando nó kkkk.

Tenho projeto que estará controlando o tempo de acesso no estabelecimento impondo um limite de 100 minutos.

Dentro do mesmo dia estou conseguindo realizar os calculos normais, porém se o usuário entrar 23:00 ele terá que sair no máximo às 00:40.

O horário eu consegui montar conforme o select abaixo a data mantém a mesma da entrada.

select aces.seqreg SEQUENCIA,
       aces.diracc SENTIDO,
       
	   aces.horacc MINUTOS, --acesso em minutos 
	   (aces.horacc + 100) LIMITE, --limite de acesso foi adicionado mais 100 minutos

	   CONVERT(varchar(2), Day(aces.datacc)) + '/' +
       CONVERT(varchar(2), MONTH(aces.datacc)) + '/' +
       CONVERT(varchar(4), Year(aces.datacc)) + '  ' +
       right( '00' + cast(aces.horacc / 60 as varchar), 2) + ':' +
       right( '00' + cast(aces.horacc - ((aces.horacc / 60) * 60) as varchar), 2 ) AS HORA,--data e hora  de entrada

	CONVERT(varchar(2), Day(aces.datacc)) + '/' +
    CONVERT(varchar(2), MONTH(aces.datacc)) + '/' +
    CONVERT(varchar(4), Year(aces.datacc)) + '  ' +
    right( '00' + cast( ((aces.horacc + 100)%1440)/60 as varchar), 2) + ':' +
    right( '00' + cast(((aces.horacc + 100)%1440)%60 as varchar), 2 ) 'SAIDA', --data e hora que deve sair
	
	Convert(Char(5),GetDate(),114) ATUAL
   
  from kansas.kansas.r070ara aces
  LEFT JOIN kansas.kansas.r090mvi mv
    on aces.numcra = mv.numcra
   and aces.numdoc = mv.numdoc
 where CONVERT(DATETIME, CONVERT(NVARCHAR(10), aces.datacc, 103), 103) >=
       CONVERT(DATETIME, '29/09/2018', 103)
   and CONVERT(DATETIME, CONVERT(VARCHAR(10), aces.datacc, 103), 103) <=
       CONVERT(DATETIME, '29/09/2018', 103)
   and (aces.coddsp like '1')
   and aces.numdoc = '325605397'
 order by aces.seqreg, aces.nompes, aces.coddsp

O problema está nesta parte do select:

 

CONVERT(varchar(2), Day(aces.datacc)) + '/' +
    CONVERT(varchar(2), MONTH(aces.datacc)) + '/' +
    CONVERT(varchar(4), Year(aces.datacc)) + '  ' +
    right( '00' + cast( ((aces.horacc + 100)%1440)/60 as varchar), 2) + ':' +
    right( '00' + cast(((aces.horacc + 100)%1440)%60 as varchar), 2 ) 'SAIDA', --data e hora que deve sair

A parte de data ele não traz a data seguinte na imagem abaixo a saída deveria ser 30/09/2018 01:27

 

image.png.99e360d4568aa033ae2a5b1a3396e321.png

 

Alguém poderia me dar uma força tenho que entregar essa semana este projeto no trabalho e está muito punk a bagaça...

 

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

  • Conteúdo Similar

    • Por alanbr00
      Olá,

      sou bem iniciante no crystal reports e estou editando um relatório.
      Onde estou listando registro do banco e separando por grupo.

      O problema que estou tendo é que alguns poucos registros, estão sendo duplicados.

      Valor Sequencial
      0,75 3.008.599
      1,99 3.008.600
      2,39 3.008.615
      2,09 3.008.616
      5,04 3.008.618
      8,25 3.008.620
      1,80 3.008.624
      1,18 3.008.625
      6,26 3.008.626
      0,94 3.008.634
      0,94 3.008.634
      1,58 3.008.635
      1,58 3.008.635
      2,50 3.008.636
      2,50 3.008.636
      0,81 3.008.637
      0,81 3.008.637
      0,40 3.008.638
      0,40 3.008.638
      2,50 3.008.639
      2,50 3.008.639
      2,07 3.008.640
      2,07 3.008.640
      3,89 3.008.641
      3,89 3.008.641
      1,73 3.008.644
      1,08 3.008.645
      1,89 3.008.646
      4,64 3.008.647
      3,75 3.008.649
      7,35 3.008.650
      0,50 3.008.652
      1,14 3.008.653
      1,11 3.008.654
      1,00 3.008.658
      0,56 3.008.659
      1,96 3.008.660
      1,97 3.008.661
      0,92 3.008.662
      2,40 3.008.663

      Não consigo entender, pois isso apenas acontece apenas em alguns registros. Verifiquei no DB e estão normais os registros.
    • Por mr22robot
      Estou com uma dúvida. É possível determinar um select a partir de uma escolha?
      Ex. 
      SELECT CASE WHEN a < b THEN select * from tabela1 WHEN d < e THEN select * form tabela2 END FROM tabela; Algo parecido. Se uma condição for atendida select1 , se outra condição for atendida: select2.
      O que acontece: estou com um relatorio que preciso criar no winthor e não consigo melhorar isso. Tenho de fazer três relatorios como solução. Se eu consigo implantar isso, eu faria somente um relatorio. 
      Tipo se marcar um campo, sai um relatorio. Se marcar outro, saí outro relatorio.
    • Por Ruben Santos
      Boa tarde,
      Sou novo no fórum e tambem em programação SQL, no entanto não desisto de procurar soluções e tentar aprender cada vez mais e melhor.
      Venho aqui pedir ajuda sobre o seguinte assunto:

       

      Estou trabalhando com Access e a tabela em questão apresenta as operações realizadas (tempo de trabalho) no caso de ter interrupção, a interrupção tem a durabilidade desde o fim da operação até ao inicio da proxima operação
      Então sobre esta tabela, faço a seguinte pesquisa para saber, quantas interrupções tenho e a que horas interromperam:
      Dei o nome de "Inicio_interrupcoes"
       
      SELECT dbo_opr.cod_gpt, dbo_opr.cod_pt, dbo_opr.un_pt, dbo_opr.data_ini, dbo_opr.data_fim, dbo_opr.cod_interrup, * FROM dbo_opr WHERE (((dbo_opr.cod_interrup) Is Not Null));  
      Este comando, executa corretamente, retornando todos os registos em que cod.interrup seja não nulo.
      Seguindo agora o código onde preciso milagrosamente de ajuda:
       
      SELECT inicio_interrupcoes.cod_gpt, inicio_interrupcoes.cod_pt, inicio_interrupcoes.un_pt, inicio_interrupcoes.data_fim, inicio_interrupcoes.cod_interrup FROM dbo_opr INNER JOIN inicio_interrupcoes ON (dbo_opr.cod_gpt = inicio_interrupcoes.cod_gpt) AND (dbo_opr.cod_pt = inicio_interrupcoes.cod_pt) GROUP BY inicio_interrupcoes.cod_gpt, inicio_interrupcoes.cod_pt, inicio_interrupcoes.un_pt, inicio_interrupcoes.data_fim, inicio_interrupcoes.cod_interrup, dbo_opr.data_ini HAVING (((dbo_opr.data_ini)>[inicio_interrupcoes].[data_fim]));
      Passando agora a explicar o que preciso:
      Na primeira consulta "Inicio_Interrupcoes" pesquiso todas os registos que contenham o campo "cod_interrup" preenchido.
      Na segunda consulta respeitando os campos "cod_gpt" e "cod_pt", pretendo obter a data de inicio da proxima operação que nesta consulta representa o fim da interrupção.
      Segue exemplo básico:
      considerem linha 2 e linha 3 da imagem:
      Linha 2 representa produção -> Inicio = 10/01/2019 08:21:13
                                     Fim = 10/01/2019 12:54:30
      Como o registo tem "Cod_interrup" considero que "10/01/2019 12:54:30" representa o inicio da interrupcão e o proximo inicio neste caso "10/01/2019 14:04:53" será o fim da interrupção e inicio da Produção.

      Alguem me pode dar uma força neste assunto?
      Obrigado, ficarei muito grato.

    • Por GabrielB3r
      Bom dia,
      estou tentando criar um sistema de empréstimo e devolução de documentos.
      Funciona da seguinte forma:
      A pessoa tem o opção de cadastrar novos documentos,os quais são inseridos da tabela "dossie_cadastrado", e ela pode cadastrar o empréstimo e a devolução do mesmo que ficam salvos na tabela "dossie_emprestimo".
      A parte de cadastro e empréstimo consegui fazer funcionar, meu problema é na hora de cadastrar a devolução. Preciso inserir a data atual no último cadastro de um determinado dossie na tabela "dossie_emprestimo".
       
      Tenho o seguinte código:
      if(isset($_POST["cod_cad"])){         $cod_cad = $_POST["cod_cad"];         }          if(isset($_GET["cod_cad"])){         $cod_cad = $_GET["cod_cad"];     } $cod_cad = strip_tags($_POST['cod_cad']); $select_upd= mysqli_query($conexao_bd,"SELECT id_emp, data_emp from dossie_emprestimo where cod_cad='$cod_cad' ORDER BY data_emp desc limit 1") ; $sql_update="UPDATE dossie_emprestimo SET data_dev=CURDATE() WHERE id_emp='$id_emp'"; mysqli_query($conexao_bd, $sql_update);  
      quando eu rodo esse código separado no phpmyadmin, funciona normalmente, mas quando coloco no meu código ele não encontra o id_emp.
      id_emp - id de empréstimo, chave primaria com auto incremento.
      data_emp - data que foi realizado o empréstimo.
      cod_cad - código de cadastro, é o código que esta relacionado a tabela de cadastro, é o id do documento. ex: toda vez que o documento "20" for emprestado esse código sera "20".
       
    • Por Devlong
      Olá amigos, eu estou tentando descobrir como fazer o meu site puxar a informação especifica de uma variável na coluna da tabela.
       
      O meu arquivo ele registra a informação na tabela char_reg_num ele usa as colunas char_id, key e value, porem eu estou querendo puxar a informação especifica da coluna key pois ele registra 2 : m_kda ( kills ) e pl_dthcount ( deaths ) e o value ( numero )

      Código padrão que veio no site.
      $sqlpvp = "SELECT `pvpladder`.`kills`, `pvpladder`.`streaks`, `pvpladder`.`deaths`, `char`.`name`, `char`.`class`, `char`.`base_level`, `char`.`job_level`, `char`.`account_id`, `char`.`online`, `login`.`---` FROM `pvpladder` LEFT JOIN `char` ON `char`.`char_id` = `pvpladder`.`char_id` LEFT JOIN `login` ON `login`.`account_id` = `char`.`account_id` WHERE `login`.`state` = '0' ORDER BY `pvpladder`.`kills` DESC, `pvpladder`.`streaks` DESC, `pvpladder`.`deaths` DESC, `char`.`base_exp` DESC LIMIT 0, 3"; no caso o que seria substituído é o pvpladder ( nome da tabela ) kills  ( m_kda  + value ) deaths  ( pl_dthcount  + value ) streaks ( no caso esse já n seria usado )

      Esse é o arquivo que registra a informação no banco de dados: https://github.com/Stolao/Npc_Release/blob/master/PvP_Ladder/Pvp_Ladder.txt

×

Informação importante

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