Ajuda num Select que traz Horas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:

Caros amigos estou com este select abaixo: mas quando os segundo ultrapassa 2 casas decimais fica assim ### como posso tratar isso ???

Aceito qualquer ajuda possivel porque já pensei em quase tudo rsrsrs....

Abraços amigos..... :D

Selecionar tudo

SELECT abs(Ltrim(To_Char(Trunc(((TO_DATE('01/12/2006 11:05:45','DD/MM/YYYY HH24:MI:SS') 
- TO_DATE('02/12/2006 13:25:40','DD/MM/YYYY HH24:MI:SS')))*24),'999999999999999'),' '))
	      ||':'||
	      Ltrim(To_Char(abs(Round((((TO_DATE('01/12/2006 11:05:45','DD/MM/YYYY HH24:MI:SS') - TO_DATE('02/12/2006 13:25:40','DD/MM/YYYY HH24:MI:SS')))*24 
	      - Trunc(((TO_DATE('01/12/2006 11:05:45','DD/MM/YYYY HH24:MI:SS') 
        - TO_DATE('02/12/2006 13:25:40','DD/MM/YYYY HH24:MI:SS')))*24))*60)),'00'),' ') 
        ||':'||
	      Ltrim(To_Char(abs(Round((((TO_DATE('01/12/2006 11:05:45','DD/MM/YYYY HH24:MI:SS') - TO_DATE('02/12/2006 13:25:40','DD/MM/YYYY HH24:MI:SS')))*24 
	      - Trunc(((TO_DATE('01/12/2006 11:05:45','DD/MM/YYYY HH24:MI:SS') 
        - TO_DATE('02/12/2006 13:25:40','DD/MM/YYYY HH24:MI:SS')))*24))*60))*360,'00'),' ') 
        horas

        from dual
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR

Sei que não responde a sua pergunta, mas ai vai uma consulta parecida que eu fiz um tempo atrás:

Selecionar tudo

select horas||':'||minutos||':'||segundos
from
(
    select lpad(trunc(           abs(data1-data2) * 24          )       , 2, '0') horas
         , lpad(trunc((mod(trunc(abs(data1-data2) * 24 * 60     ), 60))), 2, '0') minutos
         , lpad(trunc((mod(round(abs(data1-data2) * 24 * 60 * 60), 60))), 2, '0') segundos
    from
    (
        select to_date('01/12/2006 11:05:45','DD/MM/YYYY HH24:MI:SS') data1
             , to_date('02/12/2006 13:25:40','DD/MM/YYYY HH24:MI:SS') data2
        from dual
    )
);
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:

Caro amigo Rogenaro
Seu select caiu como uma luva rsrsrs...

Muito abrigado amigo.. :-o
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Olha, já que o assunto é esse, há um tempo o vindalencio postou um select que selecionava vários campos que calculavam de diversas formas, datas e horas:

Selecionar tudo

SELECT SYSDATE DATA_ATUAL,
               ADD_MONTHS(SYSDATE,-1) MENOS_UM_mês,
               ADD_MONTHS(SYSDATE,1) MAIS_UM_mês,
               LAST_DAY(SYSDATE) ULTIMO_DIA_mês,
               TRUNC(SYSDATE,'MONTH') PRIMEIRO_DIA_mês,
               MONTHS_BETWEEN(SYSDATE,'01-JAN-2001') QTD_mês,
               FLOOR(MONTHS_BETWEEN(SYSDATE,'01-JAN-2001')) ARREDONDA_ABAIXO,
               CEIL(MONTHS_BETWEEN(SYSDATE,'01-JAN-2001')) ARREDONDA_ACIMA,
               ABS(MONTHS_BETWEEN(SYSDATE,'01-JAN-2001')) VALOR_ABSOLUTO,
               ROUND((MONTHS_BETWEEN(SYSDATE,'01-JAN-2001')),3) ARREDONDA,
               TRUNC(SYSDATE,'year') PRIMEIRO_DIA_ANO,
               to_char(SYSDATE,'dd " de " FMMONTH " de " YYYY','nls_date_language=portuguese')DIAMES_EXTENSO,
               to_char(SYSDATE,'FMMONTH " DE " YYYY','nls_date_language=portuguese') mês_EXTENSO,
               TO_CHAR(SYSDATE,'HH24:MI') HORA_MINUTO,
               to_char(sysdate,'FMMonth','nls_date_language=portuguese') mês_corrente,
               to_date(lpad(to_char(1234),4,'0'),'hh24mi') dias_data,
               Floor(floor(months_between(SYSDATE,to_date('11/02/1982'))) / 12) IDADE,
               decode(TO_NUMBER(TO_CHAR(SYSDATE,'D')),2,'segunda-feira',
                                                      3,'terça-feira',
                                                      4,'quarta-feira',
                                                      5,'quinta-feira',
                                                      6,'sexta-feira',
                                                      7,'sabado',
                                                      1,'domingo') dia_da_semana
  FROM DUAL
:D
FMMS
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 24 Out 2018 9:01 am

Bom dia, sou novo por aqui e na questão PL/SQL.

Tenho uma query, porém está retornando um erro que retorna "A subconsulta retorna mais de uma linha", creio que não estou sabendo alocar o SUM ou NVL no local correto.

Segue o código:

Selecionar tudo

SELECT  ap.nr_atendimento,
        ap.DT_ALTA,
        ap.DT_ENTRADA,
            (select lpad(trunc(           abs(apu.dt_saida_unidade - apu.dt_entrada_unidade) * 24          )       , 2, '0') || ':' ||
                    lpad(trunc((mod(trunc(abs(apu.dt_saida_unidade - apu.dt_entrada_unidade) * 24 * 60     ), 60))), 2, '0')|| ':' ||
                    lpad(trunc((mod(round(abs(apu.dt_saida_unidade - apu.dt_entrada_unidade) * 24 * 60 * 60), 60))), 2, '0')
            FROM atend_paciente_unidade apu
                WHERE apu.cd_setor_atendimento = 129
                    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
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 24 Out 2018 9:01 am

madmax escreveu:Caro amigo Rogenaro
Seu select caiu como uma luva rsrsrs...

Muito abrigado amigo.. :-o
Amigo, bom dia. No meu caso, está retornando "erro mais de uma linha na consulta de uma única linha"

Não estou conseguindo alocar o SUM ou NVL no código abaixo:

Selecionar tudo

SELECT  ap.nr_atendimento,
        ap.DT_ALTA,
        ap.DT_ENTRADA,
            (select lpad(trunc(           abs(apu.dt_saida_unidade - apu.dt_entrada_unidade) * 24          )       , 2, '0') || ':' ||
                    lpad(trunc((mod(trunc(abs(apu.dt_saida_unidade - apu.dt_entrada_unidade) * 24 * 60     ), 60))), 2, '0')|| ':' ||
                    lpad(trunc((mod(round(abs(apu.dt_saida_unidade - apu.dt_entrada_unidade) * 24 * 60 * 60), 60))), 2, '0')
            FROM atend_paciente_unidade apu
                WHERE apu.cd_setor_atendimento = 129
                    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;
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Oi @FMMS, se seu problema é que o SELECT está retornando mais de uma linha e você precisa só da primeira linha, você pode adicionar a seguinte cláusula ao SELECT principal:

Selecionar tudo

WHERE ROWNUM = 1
Mas convém expandir essas Subqueries aí pra entender o que está acontecendo, porque pode ser que você tenha algum problema relacionado a dados repetidos em seu banco de dados.

No mais, quando você conseguir desmembrar esse SELECT e tiver alguma dúvida sobre isso, poste o código aqui usando a tag code e /code para formatar e ficar melhor pra gente ler e entender.
Renato Menezes Viana
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 128
Registrado em: Sáb, 18 Nov 2006 11:51 am
Localização: Rio de Janeiro - RJ

Pessoal, apenas uma outra ótica para trabalhar com diferença de datas, horas e assemelhados que talvez seja mais simples que multiplicações e multiplicações e multiplicações, etc

http://glufke.net/oracle/viewtopic.php? ... 992#p38992
Responder
  • Informação
  • Quem está online

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