2016-10-03 121 views
2

我有一個用戶從下拉列表中選擇課程持續時間的在線表單。這些數據然後進入名爲duration - varchar(5)的數據庫字段,數據示例將是02:30。然後我運行一個存儲過程,該過程應該將數據轉換爲2.5。這允許以小時工資率計算持續時間。將文本轉換爲數字

的Datafields
時間 - VARCHAR(5)02:30
ValueOfDuration - 數字(18,2)2.5

我的問題是此存儲過程運行時,我得到一個錯誤。
將數據類型varchar轉換爲實數時出錯。

UPDATE 
ManualAdjustments 
SET 
ValueOfDuration = ROUND (CONVERT(real, LEFT(Duration, 2))+(CONVERT(real,RIGHT(Duration, 2))/60.0),2) 
WHERE ValueOfDuration IS NULL 
+3

你使用的是什麼RDBMS? – Jens

+0

如果您使用的是Oracle,請使用TO_NUMBER而不是CONVERT。 –

+0

爲2:30值工作良好的sqlserver ..有沒有一個特定的值,其不工作? –

回答

1

如果數據庫是SQL服務器

UPDATE 
ManualAdjustments 
SET 
ValueOfDuration= CAST(DATEDIFF(minute,'1990-1-1','1990-1-1 '+Duration)/60.0 AS NUMERIc(15,2)) 
WHERE ValueOfDuration IS NULL 
+0

是否需要更改valueOfDuration的數據類型? – Alexandria

+0

持續時間是varchar(5),但ValueofDuration是數字(18.2) – Alexandria

+0

現在得到此錯誤,轉換日期和/或時間從字符串轉換失敗。 – Alexandria

2

假設SQL Server和持續時間不超過59:59

Update YourTable Set ValueOfDuration = DateDiff(SS,'1900-01-01','1900-01-01 00:'+Duration)/60. 

在這種情況下02:30將返回2.5

+0

什麼都不會發生錯誤,但也不會更新字段。 – Alexandria

+0

@Alexandria原諒愚蠢的問題,但是你在60之後加入了小數? 60。 –

+0

我沒有我應該有嗎? – Alexandria