Como retirar um dia a uma data?

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
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva,

Tenho um SELECT que me devolve uma data. Eu queria fazer (essa data - 1), para me devolver o dia anterior.

O SELECT é meio esquisito e não estou a conseguir retirar 1 dia à data para saber o dia anterior.

Selecionar tudo

SELECT T1.* FROM (SELECT 
                                MAX(M4_HIST_CATEG_APL.DAT_INICIO) 
                                FROM 
                                m4_HIST_CATEG_APL
                                WHERE
                                M4_HIST_CATEG_APL.ID_SOCIEDAD = '01'
                                AND
                                M4_HIST_CATEG_APL.ID_EMPREGAD = '78'
                                AND
                                M4_HIST_CATEG_APL.DAT_INI_ACT_EMP = '1990-09-15'
                                AND
                                M4_HIST_CATEG_APL.DAT_INICIO <= '2008-11-30'
                                AND
                                (M4_HIST_CATEG_APL.DAT_FIM >= '2008-11-30' or M4_HIST_CATEG_APL.DAT_FIM is null)) T1
Ideias para calcular o dia anteior a data que me é retornada neste select?

Desde já obrigado.
ederphil
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Qua, 15 Out 2008 4:05 pm
Localização: taquara-RS

dae fera!!

tenta assim..

Selecionar tudo

SELECT (T1.*) - 1 FROM (SELECT 
                                MAX(M4_HIST_CATEG_APL.DAT_INICIO) 
                                FROM 
                                m4_HIST_CATEG_APL 
                                WHERE 
                                M4_HIST_CATEG_APL.ID_SOCIEDAD = '01' 
                                AND 
                                M4_HIST_CATEG_APL.ID_EMPREGAD = '78' 
                                AND 
                                M4_HIST_CATEG_APL.DAT_INI_ACT_EMP = '1990-09-15' 
                                AND 
                                M4_HIST_CATEG_APL.DAT_INICIO <= '2008-11-30' 
                                AND 
                                (M4_HIST_CATEG_APL.DAT_FIM >= '2008-11-30' or M4_HIST_CATEG_APL.DAT_FIM is null)) T1
se quiser formatar a data tu pode usar um "to_char"

falou

qlqar coisa posta aí[/code]
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Desde já obrigado pela help.

Abc.
margaridi
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Ter, 08 Abr 2008 11:09 am
Localização: Curitiba - PR
Contato:
----------------------------
Margaridi, Marco Aurélio
www.margaridi.com

Olá, você pode subtrair a data diretamente na query.
A princípio você não precisa utilizar uma subquery:

Selecionar tudo

SELECT  MAX(M4_HIST_CATEG_APL.DAT_INICIO) - 1 DAT_INICIO
      FROM    m4_HIST_CATEG_APL 
      WHERE   M4_HIST_CATEG_APL.ID_SOCIEDAD = '01' 
      AND     M4_HIST_CATEG_APL.ID_EMPREGAD = '78' 
      AND     M4_HIST_CATEG_APL.DAT_INI_ACT_EMP = '1990-09-15' 
      AND     M4_HIST_CATEG_APL.DAT_INICIO <= '2008-11-30' 
      AND    (M4_HIST_CATEG_APL.DAT_FIM >= '2008-11-30' or 
              M4_HIST_CATEG_APL.DAT_FIM is null)
Se você precisar utilizar a subquery por algum outro motivo, você pode referenciar diretamente a coluna, conforme abaixo:

Selecionar tudo

SELECT T1.DAT_INICIO
FROM (SELECT  MAX(M4_HIST_CATEG_APL.DAT_INICIO) - 1 DAT_INICIO
      FROM    m4_HIST_CATEG_APL 
      WHERE   M4_HIST_CATEG_APL.ID_SOCIEDAD = '01' 
      AND     M4_HIST_CATEG_APL.ID_EMPREGAD = '78' 
      AND     M4_HIST_CATEG_APL.DAT_INI_ACT_EMP = '1990-09-15' 
      AND     M4_HIST_CATEG_APL.DAT_INICIO <= '2008-11-30' 
      AND    (M4_HIST_CATEG_APL.DAT_FIM >= '2008-11-30' or 
              M4_HIST_CATEG_APL.DAT_FIM is null)
     ) T1
Responder
  • Informação