【发布时间】:2015-08-27 09:54:20
【问题描述】:
我想计算两次之间的时间差,但我的问题是第二次可能是在午夜之后,而第一次是这样的:
time 1 = '2015-08-02 09:30 PM'
time 2 = '2015-08-03 02:30 AM'
所以在这种情况下,它们之间的差异将是负数, 我尝试将 -1 返回的值乘以将其转换为正值,但其他数据会出错..
我的代码是:
DECLARE @StartDate datetime = '2015-08-02';
DECLARE @EndDate datetime = '2015-08-02';
DECLARE @EmpID nvarchar(6) = '12345';
SELECT
SUM(CASE WHEN(DATEDIFF(minute, a.[Time], @StartDate)) < 0
then DATEDIFF(minute, a.[Time], @StartDate) * -1
ELSE DATEDIFF(minute, a.[Time], @StartDate) END
)
FROM
Attendance a
WHERE
(EmpID = @EmpID OR @EmpID IS NULL)
AND a.[date] <= @EndDate
GROUP BY EmpID
那我该如何解决呢?
【问题讨论】:
-
END不应该在您的CASE语句中的ELSE之后吗?这是一个错字还是你的代码是这样的? -
是的 Raj,我已经更正了..
-
也许可以尝试将数据转换为 24 位格式,例如
Convert(datetime, '2015-08-02 09:30 PM')。 -
@PatrykImosa 这不会产生影响,datediff 将自动尝试将第二个和第三个参数转换为日期时间。据我们所知,这些列可能已经是日期时间了
标签: sql sql-server time datediff