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