2016-10-03 52 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