IF / ELSE-IF取决于季度在上个季度无效

时间:2013-10-01 07:14:45

标签: sql sql-server tsql

我有一份声明,总结了一年中每个季度的参赛作品。

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语句,它起作用并给了我正确的结果。我还尝试将“ESE IF @mth BETWEEN'10'''12'”改为“ELSE”,排在“10”和“12”的行中,没有任何帮助。如果我在最后一个select语句前设置断点,调试器甚至不会停止。谁知道问题出在哪里?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

的原因

将其定义为int

答案 2 :(得分: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)