TSQL日期时间减法

时间:2009-08-06 15:25:45

标签: sql-server

我有一列Start和列End。我希望得到它们之间的小时数和分钟数。选择强制转换(End - Start as varchar)给出奇怪的结果,例如2009-07-24 06:16 - 2009-07-24 06:30给出结果12:14 AM ...将它转换为varchar是很重要的,因为以后我将使用right()和left()从字符串中剪切子字符串。我怎样才能得到正确的结果?

7 个答案:

答案 0 :(得分:5)

您可以使用DATEDIFF功能

SELECT DATEDIFF(mi, Start, End)

这将为您提供开始和结束之间的分钟数,然后您可以将其转换为小时和分钟。

答案 1 :(得分:0)

将其转换为数字,否则会尝试将其转换为日期。

答案 2 :(得分:0)

使用DATEDIFF计算所需单位中两个日期之间的差异。然后将结果转换为varchar。

答案 3 :(得分:0)

你应该做datediff

答案 4 :(得分:0)

您遇到的问题的原因是SQL处理存储日期的两个部分的方式。

日期作为两部分存储在数值内。第一部分,整数部分存储日期,第二部分,小数部分存储时间。

如果你的两个日期相当于1.50和1.25然后1.25 - 1.50 = -0.25 - 那么这将分为两部分,-0天和.25时间。一天中的0.25天将转化为6小时,因此将给出6.00AM的时间。

要获得正确的日期操作,您应该始终使用DATEDIFF和DATEPART。

答案 5 :(得分:0)

varchars永远不应该用于日期操作。像这样使用datediff:

declare @date1 datetime, @date2 datetime
select @date1 = getdate(), @date2 = DATEADD(n, 145, @date1)
SELECT @date1, @date2

select  DATEDIFF(n, @date1, @date2) as DiffMinutes,
    DATEDIFF(n, @date1, @date2)/60 as DiffHours, 
    DATEDIFF(n, @date1, @date2)%60 as DiffMinutesOfTheHour

答案 6 :(得分:0)

相对于彼此的小时和分钟: 使用:

DECLARE @StartDate  datetime
DECLARE @EndDate    datetime

set @StartDate ='2009-07-24 06:16'
SET @EndDate   ='2009-07-24 07:30 '
 SELECT DATEDIFF(HH,@StartDate,@EndDate) AS Hours,
        DATEDIFF(mi,@StartDate,@EndDate)-DATEDIFF(HH,@StartDate,@EndDate)*60 AS Minutes

返回:

Hours       Minutes
----------- -----------
1           14

(1 row(s) affected)