我有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;
感谢您的帮助
答案 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
这将产生类似于:
的输出