2013-10-01 72 views
0

我有一份聲明對每年的每個季度進行總結。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 

截至昨日select語句正常工作,總結我想要什麼,今天doenst工作了。我單獨厭倦了選擇語句,它起作用並給了我正確的結果。我也嘗試在「10」和「12」的行中將「ELSE IF @mth BETWEEN'10'和'12'」改爲「ELSE」,沒有任何幫助。如果我在最後一個select語句前設置斷點,調試器甚至不會停止。任何人都知道問題出在哪裏?

+0

請告訴我@mth的價值? – athabaska

+1

你的代碼工作正常。我沒有看到任何問題。根據您的預期不會發生什麼 – Sachin

+0

@Sachin是對的。問題可能出在你的'SELECT's – GolfWolf

回答

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 
+0

它的工作原理!十分感謝!我認爲這是非常有幫助的! – ruedi

+0

如果@mth現在是int,也許BETWEEN子句也必須使用整數? – athabaska

0

它可能是你必須聲明@mth爲varchar的原因,

把它定義爲INT

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)