如何在SQL中只获取特定月份的数据

时间:2014-06-10 10:54:50

标签: sql sql-server

我试图从查询中获得前六个月的数据。

,即我必须在过去的第六个月进行分组。

假设当前月份是6月,那么我只想要1月份的数据&我也不希望除了一月以外的所有上个月

任何人都可以帮我这个

SELECT 
   so_date
FROM 
   RS_Sells_Invoice_Info_Master SIIM
LEFT OUTER JOIN 
   RS_Sell_Order_Master AS SM ON SM.sell_order_no = SIIM.sell_order_no
LEFT OUTER JOIN 
   RS_Sell_Order_Mapping AS SOM ON SOM.sell_order_no = SIIM.sell_order_no AND SIIM.product_id = SOM.product_id
LEFT OUTER JOIN 
   RS_Inventory_Master AS IM ON IM.product_id = SIIM.product_id
where 
   so_date between CAST(DATEADD(month, DATEDIFF(month, 0, so_date)-5, 0)AS DATE) and CAST(DATEADD(month, DATEDIFF(month, 0, so_date)-4, 0)AS DATE)

3 个答案:

答案 0 :(得分:1)

  

假设当前月份是6月,那么我只想要1月份的数据

这样可行

WHERE 
  so_date >= DATEADD(mm, -6, LEFT(CONVERT(VARCHAR, GETDATE(), 120), 8) + '01')
  AND
  so_date <  DATEADD(mm, -5, LEFT(CONVERT(VARCHAR, GETDATE(), 120), 8) + '01')

LEFT(CONVERT(VARCHAR, GETDATE(), 120), 8) + '01'YYYY-MM-DD格式为您提供当月的开头。剩下的就是直截了当。

答案 1 :(得分:0)

要获取特定月份(6个月前)的所有数据,请使用以下where子句, 您需要比较月份和年份,以确保您获得正确的月份,即当前月份是否是您想要的12月份。“

  where 
          datepart(Month, [so_date]) = datepart(Month, dateadd(month, -6,getdate())) 
       and
          datepart(Year, [so_date]) = datepart(year, dateadd(month, -6,getdate()))

答案 2 :(得分:0)

请查看示例,使用 DateAdd 功能减去六个月并与之间功能进行比较

Declare @t table (name varchar(50), createddate datetime)

Insert into @t values('ajay', GETDATE()-50 ),('ajay1', '2014-03-10' ),('ajay2', '2013-12-09' ),('ajay3', '2013-11-10' )
declare @currentdate datetime = getdate() , @sixmontholddate datetime = dateadd( MONTH, -6,getdate())

select @currentdate , @sixmontholddate

select  * from @t

select * from @t where createddate between dateadd( MONTH, -6,getdate()) and GETDATE()