ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Dividir campo Hora [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
MarlonDelphi
Aprendiz
Aprendiz


Registrado: Domingo, 5 de Janeiro de 2014
Mensagens: 117

MensagemEnviada: Qui Set 25, 2014 6:20 pm    Assunto: Dividir campo Hora [RESOLVIDO] Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Set 26, 2014 10:08 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
MarlonDelphi
Aprendiz
Aprendiz


Registrado: Domingo, 5 de Janeiro de 2014
Mensagens: 117

MensagemEnviada: Sex Set 26, 2014 10:42 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
tanure
Profissional
Profissional


Registrado: Segunda-Feira, 7 de Novembro de 2011
Mensagens: 712

MensagemEnviada: Sex Set 26, 2014 10:47 am    Assunto: Responder com Citação

A melhor forma de fazer isso é converter em segundos (time_to_sec) antes de dividir
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
MarlonDelphi
Aprendiz
Aprendiz


Registrado: Domingo, 5 de Janeiro de 2014
Mensagens: 117

MensagemEnviada: Sex Set 26, 2014 10:59 am    Assunto: Responder com Citação

tanure escreveu:
A melhor forma de fazer isso é converter em segundos (time_to_sec) antes de dividir

Uso Firebird.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Set 26, 2014 11:56 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB