【问题标题】:Conversion failed when converting date and/or time from character string,when convert hours从字符串转换日期和/或时间时转换失败,当转换小时
【发布时间】:2015-07-12 09:37:02
【问题描述】:
我得到以下异常:
从字符转换日期和/或时间时转换失败
字符串
在此声明:
select CAST(RIGHT('0' + CAST(overtimeHours as varchar(2)), 2) + ':00:00' As Time)
from #GPilot;
注意:这发生在overtimeHours = 24
【问题讨论】:
标签:
sql-server
stored-procedures
casting
sql-server-2012
【解决方案1】:
那是因为“24:00:00”不是有效时间。使用模数截断:
SELECT CAST(RIGHT('0' + CAST((overtimeHours % 24) AS varchar(2)), 2) +
':00:00' As Time) FROM #GPilot;
【解决方案2】:
没有24:00:00 小时。您应该测试它是否为 24,如果是,则返回 00:00:00 并在日期部分添加一天(如果您有日期部分),或者更改为 23:59:59,或者像在 Amit 的 answer 中一样简单地使用模数。正确的做法取决于您在问题中没有分享的更广泛的背景。