2014-11-21 239 views
0

我已經做了一個查詢來計算還未完成的分鐘數,不幸的是我得到了那個錯誤。也有人可以告訴我如何在幾個小時內轉換分鐘數,例如1.45小時應該等於1.75小時,1.30應該是1.5,然後我想添加它們。當將varchar值「.03」轉換爲數據類型int時,轉換失敗int

SELECT * , 
     (SUBSTRING(CAST((NoOfHoursWorked) AS VARCHAR(500)), 1, 1)) AS Hours , 
     (SUBSTRING(CAST((NoOfHoursWorked) AS VARCHAR(500)), 3, 4)) AS Minutes , 
     (SUBSTRING(CAST((NoOfHoursWorked) AS VARCHAR(500)), 3, 4) * 10/60.00) AS FractionalHours , 
     ROUND((SUBSTRING(CAST((NoOfHoursWorked) AS VARCHAR(500)), 3, 4) * 10/60.00)/10 + (SUBSTRING(CAST((NoOfHoursWorked) AS VARCHAR(500)), 1, 1)), 2) AS ActualHours 
FROM WorkDone 
WHERE NoOfHoursWorked LIKE '%.%' 
    ------- UpDate---- 
UPDATE WorkDone 
SET  NoOfHoursWorked = ROUND((SUBSTRING(CAST((NoOfHoursWorked) AS VARCHAR(500)), 3, 4) * 10/60.00)/10 
           + (SUBSTRING(CAST((NoOfHoursWorked) AS VARCHAR(500)),1, 1)), 2) 
+0

您的NoOfHoursWorked實際上看起來像什麼? – Andrew 2014-11-21 17:06:09

+0

您可以分享'NoOfHoursWorked'列的樣本數據嗎? – 2014-11-21 17:06:33

+0

無法將圖像放在這裏數據就像這樣1.30或1.3,1.50,2,3.50這些是小數點前幾小時,之後是分鐘 – Samad 2014-11-21 17:11:27

回答

1

你有這樣的表達:

SUBSTRING(cast((NoOfHoursWorked) as varchar(500)),3,4)*10/60.00 
------------------------------------------------------ 

你被整數相乘的子字符串。我不知道NoOfHoursWorked是什麼。這對我來說似乎很奇怪,如果它被存儲爲數字以外的任何東西。所以,也許這將工作:

NoOfHoursWorked*10/60.00 

如果你需要的怪字符串操作,只是結果轉換爲數字:

cast(SUBSTRING(cast((NoOfHoursWorked) as varchar(500)),3,4) as float) *10/60.00) 
+0

NoOfHoursWorked是員工在十進制格式中插入的小時數。 – Samad 2014-11-21 17:20:51

+0

@薩馬德。 。 。然後,第一個答案應該工作。沒有必要將其轉換爲字符串來進行算術運算。事實上,至少可以這樣說,這種轉變看起來很尷尬。 – 2014-11-21 22:45:33

0

如果要添加這些小數,它給你像1.30 + 1.50 + 2.00 + 3.50 = 9.10 輸出則這可能是有益的:

-- if your column is decimal(x,2) 
SELECT sum(CAST(NoOfHoursWorked as int)) 
+ sum(cast(Parsename(NoOfHoursWorked,1) as int))/60 
+ (sum(cast(Parsename(NoOfHoursWorked,1) as int))%60) *0.01 
FROM yourtable 

-- if your column is float or decimal(x,2) 
SELECT sum(CAST(NoOfHoursWorked as int)) 
+ sum(cast(Parsename(cast((NoOfHoursWorked) as decimal(10,2)),1) as int))/60 
+ (sum(cast(Parsename(cast((NoOfHoursWorked) as decimal(10,2)),1) as int))%60) *0.01 
FROM yourtable 

SqlFiddle爲第一查詢。

SqlFiddle第二查詢。

注意:我發現相同的問題here。同樣的事情也有其他答案。檢查出。

相關問題