2011-03-23 34 views
8

Necesita ayuda para escribir la consulta y obtener los datos del último mes y los datos del mes hasta la fecha.Cómo obtener los datos del último mes y los datos del mes hasta la fecha

Si la fecha de hoy es 23 de marzo de 2011, necesito recuperar los datos del último mes y los datos hasta la fecha de hoy (el 23 de marzo de 2011).

Si la fecha es 3 Abr de 2011, los datos deberían consiste en datos de marzo mes y los datos hasta el 3 de Abril 2011.

Gracias,

Shahsra

Respuesta

14
Today including time info : getdate() 
Today without time info : DATEADD(DAY, DATEDIFF(day, 0, getdate()), 0) 
Tomorrow without time info : DATEADD(DAY, DATEDIFF(day, 0, getdate()), 1) 
Beginning of current month : DATEADD(month, datediff(month, 0, getdate()), 0) 
Beginning of last month : DATEADD(month, datediff(month, 0, getdate())-1, 0) 

lo que muy probablemente

WHERE dateColumn >= DATEADD(month, datediff(month, 0, getdate())-1, 0) 
    AND dateColumn < DATEADD(DAY, DATEDIFF(day, 0, getdate()), 1) 
+0

Bien, me gusta la solución de fechada. –

0

Very helpful page

declare @d datetime = '2011-04-03'; 

declare @startDate datetime; 
select @startDate = 
    CAST('01 '+ RIGHT(CONVERT(CHAR(11),DATEADD(MONTH,-1,@d),113),8) AS datetime); 
select @startDate; 
+0

Gracias por darme el enlace. Realmente es muy útil. – Shahsra

3

Paso Retroceda un mes, reste la cantidad de días a la fecha actual y agregue un día.

WHERE 
    DateField <= GetDate() AND 
    DateField >= DateAdd(
     mm, 
     -1, 
     DateAdd(dd, -1*DatePart(dd, GetDate())+1, GetDate()) 
) 

Para eliminar el tiempo rápidamente, puede utilizar esta moldeada (Planta (Reparto (GETDATE() como float)) AS DATETIME)

Así que la segunda parte sería (sin tiempo)

DateField >= Cast(Floor(Cast((DateAdd(
      mm, 
      -1, 
      DateAdd(dd, -1*DatePart(dd, GetDate())+1, GetDate()) 
    )) AS FLOAT)) AS DATETIME) 
+0

inexacto - el segundo da "2011-02-01 10: 55: 49.160" – RichardTheKiwi

+0

@Richard - Gracias, actualizado. –

0
Select Column1, Column2 From Table1 
Where DateColumn <= GetDate() AND 
DateColumn >= DATEADD(dd, - (DAY(DATEADD(mm, 1, GetDate())) - 1), DATEADD(mm, - 1, GetDate())) 

Editar: +1 a Russel Steen. Publicaba el mío antes de saber que había publicado.

Cuestiones relacionadas