7

可能重复:
如何比较两个日期以查找 SQL Server 2005 中的时差,日期操作

我有两个日期时间字段,应该计算它们之间的时间,包括时间字段。

如果它们之间的差异小于 24 小时,则应将其视为 1 天,将 24 到 48 小时视为 2 天。

4

2 回答 2

13

如果您谈论的是 SQL Server,那么您需要的是DATEDIFF 。

就像是:

SELECT DATEDIFF(d, StartDate, EndDate) FROM tableName

...只需将 StartDate 和 EndDate 替换为您的列名,并将 tableName 替换为实际表名。此外,您可以将 'd' 字符换成其他日期部分,例如,如果您想查找月份、年份等的日期差异。

* 更新 *

@sateesh,尝试遵循这个。我认为您可能遇到的问题与 SQL 的 DATEDIFF 函数中的舍入有关。解决这个问题的方法是降低到更细化的级别,例如几分钟而不是几天。请参阅下面的示例代码,并比较输出:

DECLARE @tblDummy TABLE(Value1 SMALLDATETIME, Value2 SMALLDATETIME, [Description] NVARCHAR(50))
INSERT INTO @tblDummy (Value1, Value2, [Description]) VALUES ('2012-01-01 12:00', '2012-01-02 01:00', '13 hours 0 mins')
INSERT INTO @tblDummy (Value1, Value2, [Description]) VALUES ('2012-01-01 12:00', '2012-01-02 11:59', '23 hours 59 mins')
INSERT INTO @tblDummy (Value1, Value2, [Description]) VALUES ('2012-01-01 12:00', '2012-01-02 13:00', '25 hours 0 mins')
INSERT INTO @tblDummy (Value1, Value2, [Description]) VALUES ('2012-01-01 12:00', '2012-01-03 12:00', '48 hours 0 mins')
INSERT INTO @tblDummy (Value1, Value2, [Description]) VALUES ('2012-01-01 12:00', '2012-01-03 12:01', '48 hours 1 min')
INSERT INTO @tblDummy (Value1, Value2, [Description]) VALUES ('2012-01-01 12:00', '2012-01-04 00:00', '60 hours 0 mins')

-- Attempt 1: Standard date diff
SELECT DATEDIFF(d, Value1, Value2) [diff], [Description]
FROM @tblDummy

-- Attempt 2: Date diff taking it down to the minutes level
SELECT CEILING((DATEDIFF(minute, Value1, Value2) / 60.0) / 24.0) [diff], [Description]
FROM @tblDummy

这是输出:

显示查询输出的图像

我相信尝试 2 可以满足您的需求。如果那对您没有帮助,那么恐怕我只是不明白您的问题。

于 2012-10-17T10:31:59.260 回答
2

听起来 DATEDIFF 函数会有所帮助。你可以选择你的 DatePart ,这样可以得到非常精细的输出。

http://msdn.microsoft.com/en-us/library/ms189794.aspx

来自:http ://www.w3schools.com/sql/func_datediff.asp

SELECT DATEDIFF(day,'2008-06-05 20:10:00','2008-08-05 20:10:00') AS DiffDate

结果:

DiffDate
61
于 2012-10-17T10:31:57.353 回答