我有一份声明,总结了一年中每个季度的参赛作品。
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语句前设置断点,调试器甚至不会停止。谁知道问题出在哪里?
答案 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)