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
  

Mensagemem Ter, 08 Mai 2007 11:33 am

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
Código: Selecionar todos
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
madmax
Localização: São Paulo

Mensagemem Ter, 08 Mai 2007 1:49 pm

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

Código: Selecionar todos
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
    )
);
rogenaro
Localização: Londrina - PR

Mensagemem Ter, 08 Mai 2007 4:56 pm

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

Muito abrigado amigo.. :-o
madmax
Localização: São Paulo

Mensagemem Ter, 15 Mai 2007 11:55 am

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:

Código: Selecionar todos
SELECT SYSDATE DATA_ATUAL,
               ADD_MONTHS(SYSDATE,-1) MENOS_UM_MES,
               ADD_MONTHS(SYSDATE,1) MAIS_UM_MES,
               LAST_DAY(SYSDATE) ULTIMO_DIA_MES,
               TRUNC(SYSDATE,'MONTH') PRIMEIRO_DIA_MES,
               MONTHS_BETWEEN(SYSDATE,'01-JAN-2001') QTD_MES,
               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') MES_EXTENSO,
               TO_CHAR(SYSDATE,'HH24:MI') HORA_MINUTO,
               to_char(sysdate,'FMMonth','nls_date_language=portuguese') mes_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
Toad
Localização: Seattle, WA

Matheus H. Gonçalves
www.toad.com.br
www.twitter.com/toadgeek

Mensagemem Qua, 24 Out 2018 10:00 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:

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

Mensagemem Qua, 24 Out 2018 10:31 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:

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

Mensagemem Qua, 24 Out 2018 1:32 pm

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:

Código: Selecionar todos
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.
Toad
Localização: Seattle, WA

Matheus H. Gonçalves
www.toad.com.br
www.twitter.com/toadgeek

Mensagemem Dom, 03 Fev 2019 3:26 pm

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

viewtopic.php?f=2&t=9876&p=38992#p38992
Renato Menezes Viana
Localização: Rio de Janeiro - RJ


  • 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 3 visitantes