两个日期和两个之间的差异time in datetime SQL中的字段

时间:2012-10-17 10:28:13

标签: datetime datediff

  

可能重复:
  How to compare two dates to find time difference in SQL Server 2005, date manipulation

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

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

2 个答案:

答案 0 :(得分:7)

如果您在谈论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

这是输出:

image displaying output from query

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

答案 1 :(得分: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