【发布时间】:2015-03-11 06:03:21
【问题描述】:
我尝试以 HH:MM 格式投射时间,它工作正常,但是当我插入超过 23 小时的时间时,即24:0 它会产生错误
“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”
下面是代码
CREATE TABLE mytable
(
timeduration varchar(25)
)
INSERT INTO mytable VALUES ('05:30')
INSERT INTO mytable values ('24:0')
INSERT INTO mytable values ('04:33')
-- OUTPUT SHOULD BE 34:3 MINUTES
select CAST
(
(SUM (datepart(hh, convert (varchar, timeduration, 108))) +
(sum(datepart(mi, convert (varchar, timeduration, 108)))/60) ) AS VARCHAR(2)
)
+ ':' +
CAST
(
sum(datepart(mi, convert (varchar, timeduration, 108))) - 60 * (sum(datepart(mi, convert (varchar, timeduration, 108)))/60)
as VARCHAR(2))
from mytable
【问题讨论】:
-
我正在使用 sql server
-
SQL Server 中的
time数据类型表示一天中的时间,不是持续时间。因此,它不(不需要)支持大于 24 小时的负数或值。这也是为什么它没有任何对加法的原生支持(因为将一天中的两次加在一起是无稽之谈)。只需在几分钟或几秒钟内工作,并将任何格式转换留给另一种语言/层来完成,并实际支持持续时间/时间跨度数据类型。
标签: sql sql-server-2008 stored-procedures