Subtrair hora

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
rcampaneli
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Seg, 31 Jul 2006 3:04 pm
Localização: PR

Galera uso o oracle 8i e tenho o seguinte select :

Selecionar tudo

SELECT to_char(dat_abertura,'HH24:MI:SS')ABERTURA,
To_char(DAT_FECHAMENTO, 'HH24:MI:SS')FECHAMENTO
FROM CHM_CADASTRO WHERE STA_CHAMADO = 'Fechado'
Gostaria de saber como faço para subtrair o dat_abertura e o dat_fechamento?
Valeu
erthal
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 130
Registrado em: Seg, 22 Nov 2004 1:45 pm
Localização: Niterói - RJ

Cara,

Dá uma olhada nesse tópico:

"Calculo de horas entre duas datas/horas"

Lá tem a solução que você procura...
rcampaneli
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Seg, 31 Jul 2006 3:04 pm
Localização: PR

Fiz este seguinte select
[code]SELECT (dat_fechamento - dat_abertura)
as Data from CHM_CADASTRO WHERE STA_CHAMADO = 'Fechado'[/code]

Tem alguma forma de trazer ele com formato de hora?
rcampaneli
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Seg, 31 Jul 2006 3:04 pm
Localização: PR

os dois campos estão no farmato date
erthal
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 130
Registrado em: Seg, 22 Nov 2004 1:45 pm
Localização: Niterói - RJ

Passe o

Selecionar tudo

to_date(,'hh24:mi:ss')
rcampaneli
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Seg, 31 Jul 2006 3:04 pm
Localização: PR

será que você poderia me mostar como se faz, não estou conseguindo fazer..
Valeu
Marlon Pasquali
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 28
Registrado em: Seg, 20 Mar 2006 3:40 pm
Localização: Erechim - RS

Isso:

Selecionar tudo

SELECT (to_date(dat_fechamento,'DD/MM/RRRR HH24:MI:SS') - to_date(dat_abertura,'DD/MM/RRRR HH24:MI:SS')) * 24 horas
as Data from CHM_CADASTRO WHERE STA_CHAMADO = 'Fechado'
rcampaneli
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Seg, 31 Jul 2006 3:04 pm
Localização: PR

Ele trouxe o resulto com valor 0 ..
Marlon Pasquali
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 28
Registrado em: Seg, 20 Mar 2006 3:40 pm
Localização: Erechim - RS

é que o resultado certamente está dando menor do que 1 hora. Veja abaixo o exemplo mais completo.

Selecionar tudo

select trunc(( (dat_fechamento - dat_abertura) * 86400 / 3600)) ||':' ||
   trunc(mod( (dat_fechamento - dat_abertura) * 86400 , 3600 ) / 60 ) || ':'||
    trunc(mod ( mod ( (dat_fechamento - dat_abertura) * 86400, 3600 ), 60 )) Tempo
as Data from CHM_CADASTRO WHERE STA_CHAMADO = 'Fechado'
rcampaneli
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Seg, 31 Jul 2006 3:04 pm
Localização: PR

Cara é isso mesmo...muito obrigado a todos pelas dicas..

valeu
FMMS
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 24 Out 2018 9:01 am

Marlon Pasquali escreveu:é que o resultado certamente está dando menor do que 1 hora. Veja abaixo o exemplo mais completo.

Selecionar tudo

select trunc(( (dat_fechamento - dat_abertura) * 86400 / 3600)) ||':' ||
   trunc(mod( (dat_fechamento - dat_abertura) * 86400 , 3600 ) / 60 ) || ':'||
    trunc(mod ( mod ( (dat_fechamento - dat_abertura) * 86400, 3600 ), 60 )) Tempo
as Data from CHM_CADASTRO WHERE STA_CHAMADO = 'Fechado'
Segue Ex:

Selecionar tudo

SELECT  ap.nr_atendimento,
        ap.DT_ALTA,
        ap.DT_ENTRADA,
        
            (SELECT TRUNC(( (apu.dt_saida_unidade - apu.dt_entrada_unidade) * 86400 / 3600)) || ':' ||
                    TRUNC(MOD( (apu.dt_saida_unidade - apu.dt_entrada_unidade) * 86400, 3600) / 60) || ':' ||
                    TRUNC(MOD ( MOD ( (apu.dt_saida_unidade - apu.dt_entrada_unidade) * 86400, 3600),60))
                    
            FROM atend_paciente_unidade apu
                [b]WHERE apu.cd_setor_atendimento = 129 --Aqui pode ter duas ou mais datas, aí precisaria somar--[/b]
                    AND apu.nr_atendimento = ap.nr_atendimento) unid_inter_3_andar

FROM atendimento_paciente_v ap,
     conta_paciente c,
     cirurgia r

WHERE ap.nr_atendimento = c.nr_atendimento
   and ap.NR_ATENDIMENTO = r.nr_atendimento(+)
   AND ap.cd_estabelecimento = 1 --:cd_estabelecimento
   AND ap.dt_entrada between '20/10/2018' AND '24/10/2018' --:dt_inicial and :dt_final + 86399 / 86400
   AND exists (select 1
          from conta_paciente
         where nr_atendimento = ap.NR_ATENDIMENTO)
   --AND ap.NR_ATENDIMENTO = 1844338

GROUP BY ap.nr_atendimento,ap.DT_ALTA,ap.DT_ENTRADA

ORDER BY ap.DT_ENTRADA;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes