2015-11-06 55 views
0

我需要在我聲明的變量中包含3個小數位的值,以反映一個月內的確切(非整數)星期數。在DEC的變量集合中計算小數的星期精確的數量

但是,SET變量返回INT值與我試過的任何東西:CONVERT,CAST或各種數據類型。

我粘貼下面的腳本。我只能想出一個解決方法:在SET中乘以1000只在select語句中分割。

但我想避免在SELECT中計算(「Calc8d」)值,將它們設置爲變量。所以我想知道:

(1)在'SET'中我的'數據類型'或'SELECT'錯誤? (2)或者一個變量不會返回小數位,但只返回整數? DECALREd DECIMAL爲31/7的直接計算仍然返回4而不是4.428571或類似。 (但DATE和DATETIME是非整數,還是它們?)。

令人遺憾的是,月份和年份不是公制,十進制或甚至十七進制,因此在開始的分割周或EOM拆分周始終是每月類似樣或其他「每月」KPI類型報表的問題。 > :-P

DECLARE @ExactNoOfWeeks_LastMowCONV DECIMAL SET @ExactNoOfWeeks_LastMowCONV = ROUND(CONVERT(DECIMAL(5,2),DATEPART(d,EOMONTH(GETDATE(), -1)))/7,3) 
DECLARE @ExactNoOfWeeks_LastMowCAST DECIMAL SET @ExactNoOfWeeks_LastMowCAST = ROUND(CAST(DATEPART(d,EOMONTH(GETDATE(), -1)) AS FLOAT)/7,3) 
DECLARE @ExactNoOfWeeks_LastMonth3K DECIMAL SET @ExactNoOfWeeks_LastMonth3K = ROUND(CONVERT(DECIMAL(5,2),DATEPART(d,EOMONTH(GETDATE(), -1)))/7,3) * 1000 
DECLARE @StraightCalc DECIMAL SET @StraightCalc = 31/7 

SELECT 
DATEPART(d,EOMONTH(GETDATE(), -1)) 'Days Prev Mo' -- number of days in pervious month 
,DATEPART(d,EOMONTH(GETDATE(), -1))/7 'Calc8d (w/o CAST)' -- same as above devided by nr of days in a week 
,ROUND(CONVERT(DECIMAL(5,2),DATEPART(d,EOMONTH(GETDATE(), -1)))/7,8) 'Calc8d (w/CONVERT)' -- calculated with CONVERT 
,ROUND(CAST(DATEPART(d,EOMONTH(GETDATE(), -1)) AS FLOAT)/7,3) 'Calc8d (w/CAST)' -- calculated with CAST 
,@ExactNoOfWeeks_LastMowCONV 'Var(w/CONVERT)' -- SELECTed Variable SET with same calculation as above returns an integer 
,@ExactNoOfWeeks_LastMowCAST 'Var(w/CAST)' -- idem 
,@ExactNoOfWeeks_LastMonth3K/1000 'Var/1K' -- idem 
,@StraightCalc 'Var Straight Calc' -- idem 
,CONVERT(NVARCHAR,GETDATE(),103) 'Today' 
,CONVERT(NVARCHAR,EOMONTH(GETDATE(),-1),103) 'Last EOM' 


Days Prev Mo  31 
Calc8d (w/o CAST) 4 
Calc8d (w/CONVERT) 4.428571 
Calc8d (w/CAST) 4.429 
Var(w/CONVERT)  4 
Var(w/CAST)  4 
Var/1K    4.429 
Var Straight Calc 4 
Today    06/11/15 
Last EOM    31/10/15 

Result

回答

0

你需要指定精度和範圍。 The default scale is zero.

這工作:

DECLARE @ExactNoOfWeeks_LastMowCONV DECIMAL(4,3) 
SET @ExactNoOfWeeks_LastMowCONV = 1.145 
select @ExactNoOfWeeks_LastMowCONV 

輸出:1.145

這不:

DECLARE @ExactNoOfWeeks_LastMowCONV DECIMAL 
SET @ExactNoOfWeeks_LastMowCONV = 1.145 
select @ExactNoOfWeeks_LastMowCONV 

輸出:

相關問題