Subtrair hora

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Seg, 31 Jul 2006 3:09 pm

Galera uso o oracle 8i e tenho o seguinte select :
[code]
SELECT to_char(dat_abertura,'HH24:MI:SS')ABERTURA,
To_char(DAT_FECHAMENTO, 'HH24:MI:SS')FECHAMENTO
FROM CHM_CADASTRO WHERE STA_CHAMADO = 'Fechado'
[/code]
Gostaria de saber como faço para subtrair o dat_abertura e o dat_fechamento?
Valeu
rcampaneli
Localização: PR

Mensagemem Seg, 31 Jul 2006 3:26 pm

Cara,

Dá uma olhada nesse tópico:

"Calculo de horas entre duas datas/horas"

Lá tem a solução que você procura...
erthal
Localização: Niterói - RJ

Mensagemem Seg, 31 Jul 2006 3:32 pm

Fiz este seguinte select

SELECT (dat_fechamento - dat_abertura)
as Data from CHM_CADASTRO WHERE STA_CHAMADO = 'Fechado'

Tem alguma forma de trazer ele com formato de hora?
rcampaneli
Localização: PR

Mensagemem Seg, 31 Jul 2006 3:47 pm

os dois campos estão no farmato date
rcampaneli
Localização: PR

Mensagemem Seg, 31 Jul 2006 3:50 pm

Passe o to_date(,'hh24:mi:ss')
erthal
Localização: Niterói - RJ

Mensagemem Seg, 31 Jul 2006 3:53 pm

será que você poderia me mostar como se faz, não estou conseguindo fazer..
Valeu
rcampaneli
Localização: PR

Mensagemem Seg, 31 Jul 2006 5:12 pm

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'
Marlon Pasquali
Localização: Erechim - RS

Mensagemem Seg, 31 Jul 2006 5:16 pm

Ele trouxe o resulto com valor 0 ..
rcampaneli
Localização: PR

Mensagemem Seg, 31 Jul 2006 5:24 pm

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

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'
Marlon Pasquali
Localização: Erechim - RS

Mensagemem Seg, 31 Jul 2006 5:26 pm

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

valeu
rcampaneli
Localização: PR

Mensagemem Qua, 24 Out 2018 3:05 pm

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

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:

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
WHERE apu.cd_setor_atendimento = 129 --Aqui pode ter duas ou mais datas, aí precisaria somar--
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;
FMMS


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante