为什么DATEADD没有从上个月获取数据?

时间:2014-04-15 23:51:07

标签: sql sql-server-2008

我有这个查询,如果我是正确的,它应该获取过去一个月的数据。

   select * from INTRANET.DBO.CSEReduxResponses where status=1 and execoffice_status=0 
   AND MONTH([approveddate])= DATEADD(MONTH,-1,GETDATE())

但它没有返回任何东西。 我知道通过查看行存在的数据: enter image description here

为什么select语句没有返回任何内容?

2 个答案:

答案 0 :(得分:2)

您需要比较两个日期的月份和年份组件。正确的查询如下:

select * from INTRANET.DBO.CSEReduxResponses where status=1 and execoffice_status=0 
AND MONTH([approveddate])= MONTH(DATEADD(MONTH,-1,GETDATE()))
AND YEAR([approveddate])= YEAR(DATEADD(MONTH,-1,GETDATE()))

答案 1 :(得分:2)

如果您想要上个月的所有内容,您必须执行以下操作:

SELECT * 
FROM INTRANET.DBO.CSEReduxResponses 
WHERE status=1 
  AND execoffice_status=0 
  AND [approveddate] between 
     DATEADD(DAY, (DATEPART(DAY, getdate())*-1)+1,DATEADD(MONTH,-1,GETDATE())) --gets the first day of the previous month
       AND 
     DATEADD(DAY, (DATEPART(DAY, getdate())*-1), GETDATE()) --gets the last day of the previous  month