我有1表:SQL轉換爲十進制,然後舍入到最接近半數
表1:
CREATE TABLE #TempTable (Time decimal(10,6), ID int)
INSERT INTO #TempTable (Time, ID) VALUES (0.5,1), (1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(8,9),(9,0.10),(10,11)
這給了我:
select * from #TempTable
+---------+----+
| Time | ID |
+---------+----+
|0.500000 | 1 |
|1.000000 | 2 |
|2.000000 | 3 |
|3.000000 | 4 |
|4.000000 | 5 |
|5.000000 | 6 |
|6.000000 | 7 |
|7.000000 | 8 |
|8.000000 | 9 |
|9.000000 |10 |
|10.000000|11 |
+---------+----+
我想獲得@number ,它基於time @ Time(Col1中的值)。爲了得到這個我做如下:
SET @Number = (CASE @Time
WHEN 00.50 THEN 0.016000
WHEN 01.00 THEN 0.013300
WHEN 01.50 THEN 0.012650
WHEN 02.00 THEN 0.012000
WHEN 02.50 THEN 0.011200
WHEN 03.00 THEN 0.010400
WHEN 03.50 THEN 0.010150
WHEN 04.00 THEN 0.009900
WHEN 04.50 THEN 0.009700
WHEN 05.00 THEN 0.009500
WHEN 05.50 THEN 0.009450
WHEN 06.00 THEN 0.009400
WHEN 06.50 THEN 0.009300
WHEN 07.00 THEN 0.009200
WHEN 07.50 THEN 0.009200
WHEN 08.00 THEN 0.009200
WHEN 08.50 THEN 0.009100
WHEN 09.00 THEN 0.009000
WHEN 09.50 THEN 0.009000
WHEN 10.00 THEN 0.009000
ELSE 9.999999
END);
問題是@time被一個用戶輸入數據(其被強制爲輸入以下列格式hh.hh [00.50 = 30分鐘]純化,默認爲varchar當他們輸入值時)。爲了確保@number從未= 9.999999,除非它是> 10.00,我嘗試做以下邏輯:
IF @Time > 00.00 AND @Time <= 10.00 THEN round to .5 and convert to decimal(10,2)
ELSE convert to decimal(10,6)
SELECT convert(decimal(10,6),@TimeA),
CASE
WHEN convert(decimal(10,6), @TimeA) >= 0.0 AND convert(decimal(10,6), @TimeA) <= 10.0 THEN convert(decimal(10,2),round(@TimeA * 2,0)/2)
ELSE convert(decimal(10,6),round(@TimeA * 2,0)/2)
END
FROM azteca.Table 1 WHERE ID = @ID
SET @Time = @TimeA
上面給我:nvarchar的04.50無法轉換爲int數據類型。這意味着案件陳述有問題。 我期待以下結果 -
User Input: 00.50 @Number = 0.016000
User Input: 01.50 @Number = 0.012650
User Input: 05.78 @Number = 0.009400
User Input: 07.90 @Number = 0.009200
User Input: 09.12 @Number = 0.009000
'round(value * 2)/ 2'? – jarlh
round(@Time * 2,0)/ 2) - 應該讓我到最近的一半:從這篇文章 - http://stackoverflow.com/questions/9873990/round-to-5-or-1-0- in-sql –
您需要將修改後的數據真正存入您的TIME(或更好的另一個變量)中,然後應用您向我們顯示的第一個邏輯(SET Number =(CASE Time等),使用該值顯示您選擇的內容一個轉換後的值,但從來沒有通過任何東西運行 – Cato