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
  

Mensagemem Qui, 29 Mar 2018 1:13 pm

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?


ORA-01722: invalid number


Código: Selecionar todos
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
Emilianni

Mensagemem Dom, 15 Abr 2018 2:18 pm

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".

Código: Selecionar todos
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
stcoutinho
Localização: Sao Paulo - SP



Voltar para PL/SQL

Quem está online

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