0

我有一份报表,汇总了一年中每个季度的条目。

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

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

4

3 回答 3

2

我猜你可能声明了一个@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
于 2013-10-01T07:24:46.450 回答
0

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

将其定义为 int

于 2013-10-01T07:31:40.573 回答
0

这就是您可以解决的方法:

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)
于 2013-10-01T07:58:07.353 回答