获取日期范围之间的时间间隔
请有人可以帮助我在这里,我试图得到日期范围之间的小时间隔表。获取日期范围之间的时间间隔
例如:
if starttime == 2012-02-06 23:59:00'
then endtime = '2012-02-29 10:26:17'
我应该有一个表(变量表)有这样的内容:
Start End Seconds
2012-02-06 23:59:00.000 2012-02-06 23:59:00.000 0
2012-02-29 09:00:00.000 2012-02-29 09:59:00.000 3540
2012-02-29 10:00:00.000 2012-02-29 10:26:17.000 1577
谢谢大家的建议和意见。我终于得到了一个是解决可能的问题。
下面是脚本的解决方案,我想出了:
DECLARE @start_date datetime = CONVERT(DATETIME,'2012-02-06 23:59:01.000',20);
DECLARE @end_date datetime = CONVERT(DATETIME,'2012-12-08 23:59:17.000',20);
DECLARE @org datetime ;
DECLARE @end datetime ;
DECLARE @datetable TABLE (h_start datetime, h_end datetime,h_sesc int);
WHILE (dateadd(second, -1, dateadd(hour, datediff(hour, 0, @start_date)+1, 0))) < @end_date
BEGIN
SET @org = null;
SET @org = @start_date;
SET @end = (dateadd(second, -1, dateadd(hour, datediff(hour, 0, @org)+1, 0)));
INSERT INTO @datetable (h_start, h_end,h_sesc)
VALUES(dateadd(second, 0,@org), @end,DATEDIFF(second, @org,@end));
SET @start_date = dateadd(second, 1,@end);
END;
INSERT INTO @datetable (h_start, h_end,h_sesc)
VALUES(dateadd(second, 0,@start_date), @end_date,DATEDIFF(second, dateadd(second, 0,@start_date),@end_date));
SELECT * FROM @datetable;
以上将给出如下因素的结果:
h_start h_end h_sesc
2012-02-06 23:59:01.000 2012-02-06 23:59:59.000 58
2012-02-07 00:00:00.000 2012-02-07 00:59:59.000 3599
2012-02-07 01:00:00.000 2012-02-07 01:59:59.000 3599
2012-02-07 02:00:00.000 2012-02-07 02:59:59.000 3599
2012-02-07 03:00:00.000 2012-02-07 03:59:59.000 3599
2012-02-07 04:00:00.000 2012-02-07 04:59:59.000 3599
2012-02-07 05:00:00.000 2012-02-07 05:59:59.000 3599
.. ..
2012-12-08 18:00:00.000 2012-12-08 18:59:59.000 3599
2012-12-08 19:00:00.000 2012-12-08 19:59:59.000 3599
2012-12-08 20:00:00.000 2012-12-08 20:59:59.000 3599
2012-12-08 21:00:00.000 2012-12-08 21:59:59.000 3599
2012-12-08 22:00:00.000 2012-12-08 22:59:59.000 3599
2012-12-08 23:00:00.000 2012-12-08 23:59:17.000 3557
希望有人会发现它有用。
有了期待您的预计表,你要在两个时间之间获得型差分在second
。
SELECT DATEDIFF(SECOND, '2012-02-29 09:00:00.000', '2012-02-29 09:59:00.000')
只给出3540是第二个的差异。
为了得到小时的时差,你可以试试这个代码:
SELECT DATEDIFF(hour, '2012-02-06 23:59:00.000', '2012-02-06 23:59:00.000')
我希望结果分解为小时间隔和间隔时间之间的小时数 – 2012-07-13 10:28:14
请阅读更新的答案...您需要获得第一个小时的差异,然后得到第二个差异,这是我在答案中更新的。 – 2012-07-13 10:29:56
对不起,应该是秒 – 2012-07-13 10:30:01
DECLARE @start_date datetime = CONVERT(DATETIME,'2012-02-06 23:59:01.000', 20);
DECLARE @end_date datetime = CONVERT(DATETIME,'2012-12-08 23:59:17.000', 20);
-- Using a recursive query after round down to full hours avoids a loop. The resulting intervals should be easier to use that way, e.g. you can but don't have to insert them into a table variable.
SET @start_date = DATEADD(HOUR, DATEPART(HOUR, @start_date), CAST(FLOOR(CAST(@start_date AS float)) AS datetime));
SET @end_date = DATEADD(HOUR, DATEPART(HOUR, @end_date), CAST(FLOOR(CAST(@end_date AS float)) AS datetime));
WITH RecursiveTimeIntervals AS
(SELECT @start_date Interval
UNION ALL SELECT DATEADD(HOUR, 1, r.Interval)
FROM RecursiveTimeIntervals r
WHERE r.Interval < @end_date)
SELECT *
FROM RecursiveTimeIntervals
ORDER BY 1
OPTION (MAXRECURSION 0)
纠正我,如果我错了 - 小时列似乎是错误的我。在两种情况下都应该为零。 – 2012-07-13 10:24:46
请检查更新 – 2012-07-13 10:40:59
请检查@LolCoder的答案。 – 2012-07-13 10:41:41