计算转换为新数据类型后的时间

时间:2012-03-14 17:45:26

标签: sql sql-server

目标:
要使用此列表显示数据:

Hour  
-----
2
2,5
1

问题:
是否有可能将StartTime和EndTime列转换为特定的数据类型,然后对X1-X2进行计算

CREATE TABLE Data
(   
    StartTime VARCHAR(5), 
    EndTime VARCHAR(5), 
)   
GO

INSERT INTO Data(StartTime,EndTime)   
SELECT '10:00','12:00' UNION ALL
SELECT '13:30','16:00' UNION ALL
SELECT '14:00','15:00' UNION ALL
GO

3 个答案:

答案 0 :(得分:1)

SELECT DATEDIFF(mi, CONVERT(DATETIME, StartTime), CONVERT(DATETIME, EndTime)) 
                    / 60.0 AS Hour
FROM Data

它适用于您的示例数据,但您应该检查EndTime是否可能是第二天,例如:

StarTime:22:30

结束时间:01:20

这种情况可能吗?如果是,则必须存储开始和结束时间的日期,而不仅仅是小时。

答案 1 :(得分:1)

已编辑:获取小数点数

SELECT ROUND(CAST( Mins AS FLOAT)/60,2) AS [hour]
FROM (
SELECT DATEDIFF(minute, CAST(StartTime AS TIME),CAST(EndTime AS TIME)) AS Mins 
    FROM  Data
) A

答案 2 :(得分:0)

如果您使用的是SQL-SERVER 2008,那么为什么不使用time对象呢?然后,您可以运行适当的时间比较功能。如果没有,您仍然可以通过converting使其工作到日期时间并运行比较功能。我相信只需要一个时间到日期时间的转换将导致日期作为最短日期。