|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
MarlonDelphi Aprendiz
Registrado: Domingo, 5 de Janeiro de 2014 Mensagens: 117
|
Enviada: Qui Set 25, 2014 6:20 pm Assunto: Dividir campo Hora [RESOLVIDO] |
|
|
Eu consigo dividir um valor HH:MM:SS por um valor inteiro? Tipo: 12:30:45 / 10
Se tiver alguma função no firebird que faça isso, eu agradeço. No mysql pelo que pesquisei tem um jeito de fazer +- assim:
SELECT SEC_TO_TIME(TIME_TO_SEC('12:30:45') / 10)
No Firebird tem algo parecido?
Editado pela última vez por MarlonDelphi em Sex Set 26, 2014 2:53 pm, num total de 1 vez |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Set 26, 2014 10:08 am Assunto: |
|
|
Bom dia,
Experimente dessa forma:
Código: | SELECT DATEADD(SECOND, (DATEDIFF(SECOND, TIME '00:00:00', TIME '12:30:45') / 10), TIME '00:00:00') |
Espero que ajude.
Editado pela última vez por imex em Qua Out 25, 2023 12:04 pm, num total de 2 vezes |
|
Voltar ao Topo |
|
|
MarlonDelphi Aprendiz
Registrado: Domingo, 5 de Janeiro de 2014 Mensagens: 117
|
Enviada: Sex Set 26, 2014 10:42 am Assunto: |
|
|
imex escreveu: | Bom dia,
Experimente dessa forma:
Código: | SELECT DATEADD(SECOND, (DATEDIFF(SECOND, TIME '00:00:00', TIME '12:30:45') / 10), TIME '00:00:00') |
Espero que ajude.
|
Isso não dá certo, pois eu preciso fazer a divisão de um total de horas que excede o padrão 23:59:59. Por exemplo. Eu posso querer dividir 30 horas por 10, ou seja: 30:00:00 / 10 = 03:00:00
Sacas? Ele não consegue converter mais que 23:59:59.
Mas mesmo assim valeu. Eu já até havia conseguido. Mas é bom saber que existe algo que faça isso. Serve pra quem necessita neste caso. Pra quem quizer ver como fiz:
Código: |
select
atendentee as Atendente, total as "Total Atendimentos", Fechadas, Pendentes, Suspensas,
(case when (media/3600) < 10 then 0||(media/3600) else (media/3600) end ||':'||
case when ((media-((media)/3600)*3600)/60) < 10 then 0||((media-((media)/3600)*3600)/60) else ((media-((media)/3600)*3600)/60) end ||':'||
case when (media - (media/3600)*3600 - ((media-((media)/3600)*3600)/60)*60 ) < 10
then '0'||(media - (media/3600)*3600 - ((media-((media)/3600)*3600)/60)*60 ) else
(media - (media/3600)*3600 - ((media-((media)/3600)*3600)/60)*60 ) end) as "Média",
(case when (HORA/3600) < 10 then 0||(HORA/3600) else (HORA/3600) end ||':'||
case when ((HORA-((HORA)/3600)*3600)/60) < 10 then 0||((HORA-((HORA)/3600)*3600)/60) else ((HORA-((HORA)/3600)*3600)/60) end ||':'||
case when (HORA - (HORA/3600)*3600 - ((HORA-((HORA)/3600)*3600)/60)*60 ) < 10
then '0'||(HORA - (HORA/3600)*3600 - ((HORA-((HORA)/3600)*3600)/60)*60 ) else
(HORA - (HORA/3600)*3600 - ((HORA-((HORA)/3600)*3600)/60)*60 ) end) as "Horas Totais"
from(SELECT
atendentee, total, Fechadas, Pendentes, Suspensas, (segundos/total) as media, HORA
from (select s.atendente as atendentee,
count(*) as total,
CAST(SUM(
EXTRACT( HOUR FROM s.hora_total ) * 3600 +
EXTRACT( MINUTE FROM s.hora_total ) * 60 +
EXTRACT( SECOND FROM s.hora_total ))as integer) AS HORA,
CAST(SUM(
EXTRACT( HOUR FROM s.hora_total ) * 3600 +
EXTRACT( MINUTE FROM s.hora_total ) * 60 +
EXTRACT( SECOND FROM s.hora_total ))as integer) AS Segundos,
count(case when s.status = 1 then 1 end) as Fechadas,
count(case when s.status = 0 then 1 end) as Pendentes,
count(case when s.status = 2 then 1 end) as Suspensas
FROM servicos s where 1=1 and s.atendente like 'EDEM%' group by s.atendente))
|
|
|
Voltar ao Topo |
|
|
tanure Profissional
Registrado: Segunda-Feira, 7 de Novembro de 2011 Mensagens: 712
|
Enviada: Sex Set 26, 2014 10:47 am Assunto: |
|
|
A melhor forma de fazer isso é converter em segundos (time_to_sec) antes de dividir |
|
Voltar ao Topo |
|
|
MarlonDelphi Aprendiz
Registrado: Domingo, 5 de Janeiro de 2014 Mensagens: 117
|
Enviada: Sex Set 26, 2014 10:59 am Assunto: |
|
|
tanure escreveu: | A melhor forma de fazer isso é converter em segundos (time_to_sec) antes de dividir |
Uso Firebird. |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Set 26, 2014 11:56 am Assunto: |
|
|
Experimente fazer um teste com alguma ferramenta de administração do banco de dados:
Código: | with CTE_Teste as
(
select 1 as Codigo, cast('10:30:00' as time) as Horas from rdb$database
union all
select 1, cast('15:00:00' as time) from rdb$database
union all
select 2, cast('12:00:00' as time) from rdb$database
union all
select 2, cast('18:00:00' as time) from rdb$database
)
select
Codigo,
dateadd(second, sum(DATEDIFF(SECOND, TIME '00:00:00', Horas)) / count(*), TIME '00:00:00')
from CTE_Teste
group by
Codigo |
Espero que ajude. |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|