Converter Horas em Minutos

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Emilianni
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 29 Mar 2018 11:09 am

Desejo converter as horas da coluna DURACAO em minutos, porém ao executar o select o banco me informar que o número é invalido.
Não estou conseguindo fazer essa conversão, alguém poderia me ajudar?

Selecionar tudo

ORA-01722: invalid number

Selecionar tudo

SELECT
    nm_usuario
   ,PRIMEIRO
   ,ULTIMO
   ,qtd
   , DURACAO
   ,TO_CHAR(TRUNC((DURACAO * 60) / 3600), 'FM9900') || ':' ||
   TO_CHAR(TRUNC(MOD((DURACAO * 60), 3600) / 60), 'FM00') || ':' ||
   TO_CHAR(MOD((DURACAO * 60), 60), 'FM00')  minutos
FROM
(
SELECT
    STP.nm_usuario
   ,Min(dh_processo) PRIMEIRO
   ,MAX(dh_processo) ULTIMO
   ,Count(STP.CD_ATENDIMENTO)  qtd
   ,TO_CHAR(TRUNC(((Round(((MAX(dh_processo))-(Min(dh_processo) ))*1440,2)) * 60) / 3600), 'FM9900') || ':' ||
    TO_CHAR(TRUNC(MOD(((Round(((MAX(dh_processo) )-(Min(dh_processo)))*1440,2)) * 60), 3600) / 60), 'FM00') || ':' ||
    TO_CHAR(MOD(((Round(((Min(dh_processo))-(Min(dh_processo)))*1440,2)) * 60), 60), 'FM00') AS DURACAO
--   ,DBAMV.fnc_sacr_calcula_tempo_espera(DT_ATENDIMENTO,Min(dh_processo),MAX(dh_processo)) TEMPO
FROM
    DBAMV.sacr_tempo_processo STP
   ,DBAMV.ATENDIME ATE
WHERE
    STP.cd_atendimento  = ATE.cd_atendimento (+)
AND STP.cd_tipo_tempo_processo = 30
AND Trunc(dh_processo) between TO_DATE('26/02/2018','dd/mm/yyyy') AND TO_DATE('26/02/2018','dd/mm/yyyy') --= Trunc(SYSDATE)
GROUP BY
    STP.nm_usuario ,DT_ATENDIMENTO 
)
Anexos
Forum.JPG
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Emiliani,

Tudo bem?

Tentou executar a querie "em pedaços"?

Acredito que a "subquerie" esteja transformando os resultados em "texto" e você então se depara com este erro ao tentar efetuar operações matemáticas na "querie exterior".

Tente executar sequencialmente estas queries abaixo, para obter os valores de DURACAO para um único registro .. depois tente usar estes resultados na "querie exterior".

Selecionar tudo

SELECT
   TO_CHAR(TRUNC(((Round(((MAX(dh_processo))-(Min(dh_processo) ))*1440,2)) * 60) / 3600), 'FM9900') 
FROM
    DBAMV.sacr_tempo_processo STP
   ,DBAMV.ATENDIME ATE
WHERE
    STP.cd_atendimento  = ATE.cd_atendimento (+)
AND STP.cd_tipo_tempo_processo = 30
AND Trunc(dh_processo) between TO_DATE('26/02/2018','dd/mm/yyyy') AND TO_DATE('26/02/2018','dd/mm/yyyy') 
GROUP BY STP.nm_usuario ,DT_ATENDIMENTO 

SELECT
   TO_CHAR(TRUNC(MOD(((Round(((MAX(dh_processo) )-(Min(dh_processo)))*1440,2)) * 60), 3600) / 60), 'FM00')
FROM
    DBAMV.sacr_tempo_processo STP
   ,DBAMV.ATENDIME ATE
WHERE
    STP.cd_atendimento  = ATE.cd_atendimento (+)
AND STP.cd_tipo_tempo_processo = 30
AND Trunc(dh_processo) between TO_DATE('26/02/2018','dd/mm/yyyy') AND TO_DATE('26/02/2018','dd/mm/yyyy') 
GROUP BY STP.nm_usuario ,DT_ATENDIMENTO 

SELECT
    TO_CHAR(MOD(((Round(((Min(dh_processo))-(Min(dh_processo)))*1440,2)) * 60), 60), 'FM00') AS DURACAO
FROM
    DBAMV.sacr_tempo_processo STP
   ,DBAMV.ATENDIME ATE
WHERE
    STP.cd_atendimento  = ATE.cd_atendimento (+)
AND STP.cd_tipo_tempo_processo = 30
AND Trunc(dh_processo) between TO_DATE('26/02/2018','dd/mm/yyyy') AND TO_DATE('26/02/2018','dd/mm/yyyy') 
GROUP BY STP.nm_usuario ,DT_ATENDIMENTO 
Abraços,

Coutinho
Responder
  • Informação
  • Quem está online

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