用户输入的-1个月的数据偏移量之和



我需要修改一段代码,其中用户输入3个字段:年,开始月和结束月。然后,它将对在开始月/结束月日期范围内发送的托盘数量进行求和。

我想修改它,使它在用户输入前一个月提取信息。

示例1:

@Year: 2022, @StartMonth: 1, @EndMonth: 5

它应该提取从2021年12月1日到2022年4月30日的数据。

示例2:

@Year: 2021, @StartMonth: 1, @EndMonth: 12

它应该提取2020年12月1日至2021年11月30日的数据。

我包含了原始代码,我不确定如何修改它,因为用户必须输入多少输入。

Original Code:
@Year int, @StartMonth int, @EndMonth int
SELECT        SUM(Pallets) AS Expr1, DATEPART(mm, Date) AS Expr2, DATEPART(yyyy, Date) AS Expr3
FROM            dbo.PalettesData
WHERE        (DATEPART(mm, Date) BETWEEN @StartMonth AND @EndMonth) AND (DATEPART(yyyy, Date) = @Year)
GROUP BY DATEPART(mm, Date), DATEPART(yyyy, Date)

在上面的场景中,我总是倾向于从@StartMonth,@EndMonth@Year变量构建日期。

下面的代码演示了如何从提供的变量中获取日期。

Declare @StartMonth int=1 , @EndMonth int=10 , @Year int = 2020
---Expected resultset should be between 2019-12-01 till 2020-09-30
select 
dateadd(month,-1,cast(cast(@Year as varchar)+case when @StartMonth <10 then '-0' else '-' end+cast(@StartMonth as varchar)+'-01' as date)) startdate,
dateadd(day,-1,cast(cast(@Year as varchar)+case when @EndMonth <10 then '-0' else '-' end+cast(@EndMonth as varchar)+'-01' as date)) as EndDate

话虽如此,你可以修改你的where子句如下(由于没有提供样本数据,我无法测试where子句)。:

WHERE Date BETWEEN 
dateadd(month,-1,cast(cast(@Year as varchar)+case when @StartMonth <10 then '-0' else '-' end+cast(@StartMonth as varchar)+'-01' as date))
AND
dateadd(day,-1,cast(cast(@Year as varchar)+case when @EndMonth <10 then '-0' else '-' end+cast(@EndMonth as varchar)+'-01' as date))

相关内容

  • 没有找到相关文章