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