如何在sql中减去两个日期列和两个时间列

时间:2014-05-07 14:47:38

标签: sql sql-server sql-server-2000 datediff subtraction

我有4列

Startdate, 
enddate, 
starttime, 
endtime.  

我需要从enddate and endtime - startdate and starttime中删除。我将需要来自sql中的四列的答案。

到目前为止,我发现了这个,但我认为这不会正常。

SELECT DATEDIFF (day, enddate, startdate) as NumberOfDays  
DATEDIFF(hour,endtime,starttime) AS NumberOfHours 
DATEDIFF(minute,endtime,starttime) AS NumberOfMinutes 
from table;

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

假设您有这样的数据,您可以将StartDate添加到StartTime以获取StartDateTime,对于EndDateTime也是如此

StartDate                StartTime                EndDate                  EndTime              
-----------------------  -----------------------  -----------------------  -----------------------
2014-05-01 00:00:00.000  1900-01-01 10:53:28.290  2014-05-07 00:00:00.000  1900-01-01 11:55:28.290

一旦你完成了,你可以得到这样的日,小时和分钟:

select 
DATEDIFF(minute, StartDate + StartTime, EndDate + EndTime) / (24*60) 'Days',
(DATEDIFF(minute, StartDate + StartTime, EndDate + EndTime) / 60) % 24 'Hours',
DATEDIFF(minute, StartDate + StartTime, EndDate + EndTime) % 60 'Minutess'
  from YourTable

我们在几分钟内完成工作,以防止部分天数过夜和部分时间跨越一小时的问题。

答案 1 :(得分:0)

编辑 - 现在我意识到问题出在SQL Server 2000上,这个建议的答案可能不起作用。

可以在https://www.microsoft.com/en-us/download/details.aspx?id=18819找到SQL Server 2000文档。安装完成后,在已安装的路径中查找tsqlref.chm,在该帮助文件中,您可以找到特定于DATEDIFF的信息。

根据原始问题的措辞,我假设开始/结束时间列的类型为TIME,这意味着没有日期部分。考虑到这一点,以下内容将回答您的问题。

但请注意,根据您的数据,您将在秒和毫秒方面失去精确度。

有关DATEDIFF的更多信息:https://msdn.microsoft.com/en-us/library/ms189794.aspx


DECLARE @mytable AS TABLE 
    (
        startdate DATETIME,
        enddate DATETIME,
        starttime TIME,
        endtime TIME
    )


INSERT INTO @mytable (startdate, enddate, starttime, endtime)
VALUES      (GETDATE() - 376, GETDATE(), '00:00:00', '23:59')

SELECT      *
FROM        @mytable

SELECT      DATEDIFF(HOUR, startdate, enddate) AS [NumHours],
            DATEDIFF(MINUTE, starttime, endtime) AS [NumMinutes]
FROM        @mytable

这将产生类似于:

的输出

enter image description here