取决于季度的 IF/ELSE-IF 在最后一个季度不起作用



我有一个语句,对一年中每个季度的条目求和。

BEGIN
SET @mth = DATEPART(MONTH, GETDATE())
IF @mth BETWEEN '1' AND '3'
-- SELECT-Statement
ELSE IF @mth BETWEEN '4' AND '6'
-- SELECT-Statement
ELSE IF @mth BETWEEN '7' AND '9'
-- SELECT-Statement
ELSE IF @mth BETWEEN '10' AND '12'
-- SELECT-Statement
END

直到昨天,选择语句工作正常并总结了我想要的,今天它不再有效了。我单独厌倦了选择语句,它可以工作并给我正确的结果。我还尝试在"10"和"12"行中将"ELSE IF @mth"更改为"ELSE",但没有帮助。如果我在最后一个选择语句前面设置断点,调试器甚至不会停止。有人知道问题出在哪里吗?

我猜您可能将@mth变量声明为可能导致问题的varchar变量。如果您将其声明为 int ,您将获得预期的结果。

BEGIN
DECLARE @mth int
SET @mth = DATEPART(MONTH, GETDATE())
IF @mth BETWEEN '1' AND '3'
print '1'
-- SELECT-Statement
ELSE IF @mth BETWEEN '4' AND '6'
print '2'
-- SELECT-Statement
ELSE IF @mth BETWEEN '7' AND '9'
print '3'
-- SELECT-Statement
ELSE IF @mth BETWEEN '10' AND '12'
print '4'
-- SELECT-Statement
END

这可能是您将@mth声明为varchar的原因,

将其定义为 int

这就是你可以解决它的方法:

DECLARE @from datetime 
SET @from = dateadd(month, datediff(month, 0, current_timestamp)/3*3, 0)
-- SELECT-Statement....
-- WHERE datefield >= @from
-- AND datefield < dateadd(month, 3, @from)

最新更新