none
Ajuda Data RRS feed

  • Pergunta

  • Amigos,

     

    tenho um processo onde tenho que realizar um Between entre a primeira data que não irá sofrer alteração e uma segunda data que esse sim terá que ser alterada todo mês, ou seja, uma unica vez por mês eu tenho que executar esse processo e alterar a data final para o ultimo dia do mês anterior. Ou seja se eu estou no mês de set/08 a data final deverá ser 31/08/2008.

     

    Como faço para deixar esse processo automático, ou seja, não precisar entrar mais no processo para alterar essa data.

     

    Minha consulta é:

    Select *

    From D_Camara_Analitica_Final

    Where dt_Inclusao Between '2007-10-01' and '2008-08-31'

    and (Dt_Saida > '2008-08-31' or Dt_Saida is null)

    and (Dt_Decurso > '2008-08-31' or Dt_Decurso is null)

    quinta-feira, 11 de setembro de 2008 19:41

Respostas

Todas as Respostas

  • Olá Daniel.

     

    Acho que isso deve ajudar:

     

    SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))

     

    Abs

    quinta-feira, 11 de setembro de 2008 20:33
  • Amigo,

     

     pelo que entendi pode pode fazer o seguinte, pegar um dia antes do primeiro dia do mês, dessa forma não importa a data. Assim:

     

    select convert(smalldatetime, '01/'+ convert(varchar, month(Getdate())) + '/' + convert(varchar, year(Getdate())),103)-1

     

    coloque isso no lugar da data limite, essa função vai pegar o primeiro dia do mês anterior... vc ainda pode transformar isso numa função e passar como parâmetro a data, neste caso eu usei a data atual "getdate()"

     

    Abraço

    quinta-feira, 11 de setembro de 2008 20:44
  • Patricio,

     

    é isso mesmo, mais eu tenho uma dúvida. Quando os meses terminarem em 31 ou 30 irá pegar exatamente o ultimo dia do mês anterior? E quando for Fev?

     

    sexta-feira, 12 de setembro de 2008 12:23
  • Bom Dia,

     

    Segue uma proposta. Você pode armazenar previamente o valor em uma variável se for o caso.

     

    Code Snippet

    Select *

    From D_Camara_Analitica_Final

    Where dt_Inclusao Between '20071001' and

    DATEADD(DD,-DAY(GETDATE()),CAST(CONVERT(CHAR(10),GETDATE(),112) AS SMALLDATETIME))

    and (Dt_Saida > DATEADD(DD,-DAY(GETDATE()),CAST(CONVERT(CHAR(10),GETDATE(),112) AS SMALLDATETIME))

    or Dt_Saida is null)

    and (Dt_Decurso > DATEADD(DD,-DAY(GETDATE()),CAST(CONVERT(CHAR(10),GETDATE(),112) AS SMALLDATETIME))

    or Dt_Decurso is null)

     

     

    Recomendo não trabalhar com datas no formato YYYY-MM-DD. Elas são vulneráveis a configurações. Opte pelo formato YYYYMMDD que não lhe dará dores de cabeça.

     

    [ ]s,

     

    Gustavo

    sexta-feira, 12 de setembro de 2008 12:27
  • Olá Daniel.

     

    Sim, isso mesmo. Quando for fevereiro, ele vai pegar 28 ou 29 dependendo do ano.

     

    Faça o teste, substitua o GetDate() por uma data e veja o resultado.

     

    Abs

     

    sexta-feira, 12 de setembro de 2008 12:41
  • Patricio,

     

    como faço para inserir um valor a uma variavel sendo que este é extraido de uma consulta.

     

    sexta-feira, 12 de setembro de 2008 18:44
  • Olá Daniel, de onde vem essa consulta? Depois ele é passado por parâmetro?

    Você pode fazer assim:

    DECLARE @Data AS DATETIME

    SELECT
    DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,
    @Data),0))

    Abs
    sexta-feira, 12 de setembro de 2008 19:22
  • Consegui fazer desta maneira.

     

    Declare @dt_Ultimo_Arq as smalldatetime

    Set @dt_Ultimo_Arq = (Select Max(Dt_Arquivo) from dbo.D_Camara_Analitica_Atual);

     

     

    O que eu queria era pegar o resultado da consulta e colocar em uma variavel.

    sexta-feira, 12 de setembro de 2008 20:11