Ir para conteúdo
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×
Quer acesso a todas as Áreas do Fórum, até aquelas só para membros VIPs? Também quer poder baixar qualquer ARQUIVO? ×
AVISO AOS MEMBROS:

Fizemos uma atualização em 18/06/2023, e a forma de acesso ao Fórum mudou. Não mais está sendo aceito o login pelo Nome de Exibição cadastrado. Agora, apenas pelo email e pelos integradores de Login do Facebook, Google e Microsoft. O Facebook estava com uma validação pendente e já foi normalizado o acesso, já o Google, ainda estamos verificando o que está ocorrendo que não está funcionando.
Caso precisem de ajuda para o login pelo email acesse o link << Esqueci minha senha de acesso>> ou nos envie um pedido de ajuda pelo email admin@forumrm.com.br

Administração
ForumRM

Ajuda - SQL Conversão de Minutos para Horas


Posts Recomendados


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  29
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  198
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Prezados,

Estou com uma dificuldade em um relatório e cinte da funcionalidade desse canal, peço a ajuda de todos. O relatório mencionado traz a informação da quantidade de horas executada por um determinado associado em um dia quando ela for superior a 2hs por dia, como item de controle sobre a quantodade máxima permitida por lei. No entanto este relatório não traz a informação fidedigna quando o horário de associado não está cadastrado corretamente.

Assim fizemos uma análise e identificamos que o campo mais correto para essa apuração é da quantidade de horas trabalhadas por dia (AAFHTFUN.HTRAB). Com isso colocamos esse campo no relatório e o mesmo traz a informação em minutos. Preciso de uma sentença que converta esse nº em horas no formato (00:00) e traga apenas as pessoas que tenham trabalhado mais que 10:00 no dia.

A clausula usada para essa conversão no parâmetro anterior (horas extras executadas) é este abaixo. Já tentei substituir o campo EXTRAEXECUTADO por HTRAB e não funcionou.

select CASE WHEN ( :EXTRAEXECUTADO )>=60 THEN

CASE WHEN ( :EXTRAEXECUTADO )%60 <> 0 then

RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAEXECUTADO )/60)),2) +':'+ RIGHT('00'+CONVERT(VARCHAR,( :EXTRAEXECUTADO %60)),2)

else RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAEXECUTADO )/60)),2) +':00' end

WHEN :EXTRAEXECUTADO <60 THEN '000:'+RIGHT('00'+CONVERT(VARCHAR,( :EXTRAEXECUTADO )),2) end EXTRAEXECUTADO,

CASE WHEN ( :EXTRAAUTORIZADO )>=60 THEN

CASE WHEN ( :EXTRAAUTORIZADO )%60 <> 0 then

RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAAUTORIZADO )/60)),2) +':'+ RIGHT('00'+CONVERT(VARCHAR,( :EXTRAAUTORIZADO %60)),2)

else RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAAUTORIZADO )/60)),2) +':00' end

WHEN :EXTRAAUTORIZADO <60 THEN '000:'+RIGHT('00'+CONVERT(VARCHAR,( :EXTRAAUTORIZADO )),2) end EXTRAAUTORIZADO

FROM GCOLIGADA

WHERE CODCOLIGADA = 0

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  1.140
  • Conteúdo/Dia:  0.21
  • Reputação:   60
  • Pontos/Conquistas:  6.161
  • Conteúdo Resolvido:  0
  • Dias Ganho:  33
  • Status:  Offline
  • Idade:  42
  • Dispositivo:  Windows

Prezados,

Estou com uma dificuldade em um relatório e cinte da funcionalidade desse canal, peço a ajuda de todos. O relatório mencionado traz a informação da quantidade de horas executada por um determinado associado em um dia quando ela for superior a 2hs por dia, como item de controle sobre a quantodade máxima permitida por lei. No entanto este relatório não traz a informação fidedigna quando o horário de associado não está cadastrado corretamente.

Assim fizemos uma análise e identificamos que o campo mais correto para essa apuração é da quantidade de horas trabalhadas por dia (AAFHTFUN.HTRAB). Com isso colocamos esse campo no relatório e o mesmo traz a informação em minutos. Preciso de uma sentença que converta esse nº em horas no formato (00:00) e traga apenas as pessoas que tenham trabalhado mais que 10:00 no dia.

A clausula usada para essa conversão no parâmetro anterior (horas extras executadas) é este abaixo. Já tentei substituir o campo EXTRAEXECUTADO por HTRAB e não funcionou.

select CASE WHEN ( :EXTRAEXECUTADO )>=60 THEN

CASE WHEN ( :EXTRAEXECUTADO )%60 <> 0 then

RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAEXECUTADO )/60)),2) +':'+ RIGHT('00'+CONVERT(VARCHAR,( :EXTRAEXECUTADO %60)),2)

else RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAEXECUTADO )/60)),2) +':00' end

WHEN :EXTRAEXECUTADO <60 THEN '000:'+RIGHT('00'+CONVERT(VARCHAR,( :EXTRAEXECUTADO )),2) end EXTRAEXECUTADO,

CASE WHEN ( :EXTRAAUTORIZADO )>=60 THEN

CASE WHEN ( :EXTRAAUTORIZADO )%60 <> 0 then

RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAAUTORIZADO )/60)),2) +':'+ RIGHT('00'+CONVERT(VARCHAR,( :EXTRAAUTORIZADO %60)),2)

else RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAAUTORIZADO )/60)),2) +':00' end

WHEN :EXTRAAUTORIZADO <60 THEN '000:'+RIGHT('00'+CONVERT(VARCHAR,( :EXTRAAUTORIZADO )),2) end EXTRAAUTORIZADO

FROM GCOLIGADA

WHERE CODCOLIGADA = 0

Leandro,

Utilizo essa função para fazer conversão de numero para hora, exemplo 60 equivale a 1 hora

CREATE FUNCTION FORMATO_HORA (@TEMPO INT, @FORMATO INT)

RETURNS VARCHAR(20)

AS

BEGIN

DECLARE @HORARIO VARCHAR(20)

DECLARE @HORA INT

DECLARE @MINUTO INT

DECLARE @SEGUNDO INT

DECLARE @NEGATIVO BOOLEAN

SET @NEGATIVO = 0 -- VARIÁVEL @NEGATIVO PARA CONTROLE DE RESULTADOS NEGATIVOS.

IF @TEMPO < 0 -- TESTA SE A VARIÁVEL DE ENTRADA É NEGATIVA.

BEGIN

SET @TEMPO = @TEMPO * -1; -- CONVERTE A VARIÁVEL DE ENTRADA EM POSITIVO.

SET @NEGATIVO = 1 -- ALTERA O STATUS DA VARIÁVEL DE CONTROLE.

END

--FORMATO DE HH:MM:SS

IF @FORMATO = 1

BEGIN

SET @HORA = (@TEMPO/3600)

SET @MINUTO = (@TEMPO%3600) / 60

SET @SEGUNDO = (@TEMPO%3600) % 60

SELECT @HORARIO =

CASE WHEN @TEMPO/3600 >= 1

THEN CASE LEN(CAST((@HORA) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST ((@HORA) AS VARCHAR) + ':' + CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST((@MINUTO) AS VARCHAR) + ':' + CASE LEN(CAST((@SEGUNDO) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST((@SEGUNDO) AS VARCHAR)

ELSE CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST((@MINUTO) AS VARCHAR) + ':' + CASE LEN(CAST((@SEGUNDO) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST((@SEGUNDO) AS VARCHAR)

END

END

--FORMATO DE HH:MM

ELSE IF @FORMATO = 2

BEGIN

SET @HORA = (@TEMPO/60)

SET @MINUTO = (@TEMPO%60)

SELECT @HORARIO =

CASE LEN(CAST((@HORA) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST ((@HORA) AS VARCHAR) + ':' + CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@MINUTO) AS VARCHAR)

END

--TRATA O RESULTADO NEGATIVO

IF @NEGATIVO = 1

SET @HORARIO = ('-' + @HORARIO)

RETURN (@HORARIO)

END

select dbo.FORMATO_HORA(60,2)

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  29
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  198
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Leandro,

Utilizo essa função para fazer conversão de numero para hora, exemplo 60 equivale a 1 hora

CREATE FUNCTION FORMATO_HORA (@TEMPO INT, @FORMATO INT)

RETURNS VARCHAR(20)

AS

BEGIN

DECLARE @HORARIO VARCHAR(20)

DECLARE @HORA INT

DECLARE @MINUTO INT

DECLARE @SEGUNDO INT

DECLARE @NEGATIVO BOOLEAN

SET @NEGATIVO = 0 -- VARIÁVEL @NEGATIVO PARA CONTROLE DE RESULTADOS NEGATIVOS.

IF @TEMPO < 0 -- TESTA SE A VARIÁVEL DE ENTRADA É NEGATIVA.

BEGIN

SET @TEMPO = @TEMPO * -1; -- CONVERTE A VARIÁVEL DE ENTRADA EM POSITIVO.

SET @NEGATIVO = 1 -- ALTERA O STATUS DA VARIÁVEL DE CONTROLE.

END

--FORMATO DE HH:MM:SS

IF @FORMATO = 1

BEGIN

SET @HORA = (@TEMPO/3600)

SET @MINUTO = (@TEMPO%3600) / 60

SET @SEGUNDO = (@TEMPO%3600) % 60

SELECT @HORARIO =

CASE WHEN @TEMPO/3600 >= 1

THEN CASE LEN(CAST((@HORA) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST ((@HORA) AS VARCHAR) + ':' + CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST((@MINUTO) AS VARCHAR) + ':' + CASE LEN(CAST((@SEGUNDO) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST((@SEGUNDO) AS VARCHAR)

ELSE CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST((@MINUTO) AS VARCHAR) + ':' + CASE LEN(CAST((@SEGUNDO) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST((@SEGUNDO) AS VARCHAR)

END

END

--FORMATO DE HH:MM

ELSE IF @FORMATO = 2

BEGIN

SET @HORA = (@TEMPO/60)

SET @MINUTO = (@TEMPO%60)

SELECT @HORARIO =

CASE LEN(CAST((@HORA) AS VARCHAR)) WHEN 1

THEN '0'

ELSE ''

END + CAST ((@HORA) AS VARCHAR) + ':' + CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@MINUTO) AS VARCHAR)

END

--TRATA O RESULTADO NEGATIVO

IF @NEGATIVO = 1

SET @HORARIO = ('-' + @HORARIO)

RETURN (@HORARIO)

END

select dbo.FORMATO_HORA(60,2)

Frederico. Primeiramente muito obrigado pelo retorno, mas como faria para colocar em meu relatório. Criaria uma sentença copiando e colando o que você colocou acima? Em que local colocaria o campo HTRAB do meu relatório?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  1.140
  • Conteúdo/Dia:  0.21
  • Reputação:   60
  • Pontos/Conquistas:  6.161
  • Conteúdo Resolvido:  0
  • Dias Ganho:  33
  • Status:  Offline
  • Idade:  42
  • Dispositivo:  Windows

Frederico. Primeiramente muito obrigado pelo retorno, mas como faria para colocar em meu relatório. Criaria uma sentença copiando e colando o que você colocou acima? Em que local colocaria o campo HTRAB do meu relatório?

Leandro,

Essa é uma função que precisa ser criada no banco de dados do Corpore, depois de criado a função no banco de dados ai dentro do relatório você pode usar da seguinte forma

select dbo.Formato_Hora(HTRAB,1) from AAFHTFUN ou select dbo.Formato_Hora(HTRAB,2) from AAFHTFUN

1 depois da virgula é para o formato HH:MM:SS

2 depois da virgula é para o formato HH:MM

[]'s

Link para comentar
Compartilhar em outros sites

  • 7 meses depois...

  • Tópicos Que Criei:  6
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  36
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  240
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  34

Tem um bem simples...

Select LPAD(TRUNC(:HORA/60), 2, '0')||':'|| LPAD((:HORA-TRUNC(:HORA/60)*60), 2, '0')

from dual

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  899
  • Tópicos/Dia:  0.14
  • Meu Conteúdo:  8.841
  • Conteúdo/Dia:  1.34
  • Reputação:   310
  • Pontos/Conquistas:  106.574
  • Conteúdo Resolvido:  0
  • Dias Ganho:  195
  • Status:  Offline
  • Idade:  52
  • Dispositivo:  Windows

Tem um bem simples...

Select LPAD(TRUNC(:HORA/60), 2, '0')||':'|| LPAD((:HORA-TRUNC(:HORA/60)*60), 2, '0')

from dual

Pra ORACLE neste caso...
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  6
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  36
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  240
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  34

Pra SQL só trocar o TRUNC por ROUND, o negocio é a lógica usada fica mais simples do que usar uma função.

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.