如何使用SQL Server设置时间间隔

时间:2014-03-03 11:25:36

标签: c# asp.net sql sql-server

我正在尝试制作报告,其中时间间隔是分钟,我有开始时间&结束时间,并希望有两次之间的时间间隔。

例如。

开始时间: - 晚上8:00结束时间: - 下午16:00

表结构可能是这样的。

S.no ---------------------------Time Interval

1--------------------------------8:00 AM - 8:10 AM(ENTRY STARTS)

2--------------------------------8:10 AM- 8:20 AM

3------------------------------- 8:20 AM - 8:30 AM


Nth-----------------------------3:50PM - 4:00 PM(LAST ENTRY FOR
 REPORT)

如何在SQL查询中使用它并且我想在Asp.Net GridView中使用它?

例如。

RE TABLE STRUCTURE

现在使用以下数据我试图在workdatetime的开始时间和此workdatetime的最后时间之间设置密钥/

逻辑是SAme为PREVIOUS但无法在时间间隔之间放置NO OF KEYS。 我想显示与上面相同的结构,只在时间间隔/

中添加一列关键字

WorkdateTime * ** * NoOfKeys

16:52:04 * ** * 54

16:52:06 * ** * 0

16:52:07 * ** * 2

16:52:25 * ** * 0

16:52:26 * ** * 0

16:52:35 * ** * 0

16:52:35 * ** * 0

16:53:15 * ** * 0

16:53:55 * ** * 0

16:54:28 * ** * 11

16:54:35 * ** * 0

16:55:15 * ** * 0

16:55:55 * ** * 0

16:56:35 * ** * 0

16:57:15 * ** * 0

16:57:28 * ** * 103

16:57:55 * ** * 0

16:58:35 * ** * 0

16:58:39 * ** * 2

16:59:09 * ** * 19

16:59:15 * ** * 0

16:59:42 * ** * 40

16:59:43 * ** * 2

16:59:55 * ** * 0

17:00:35 * ** * 0

17:01:15 * ** * 0

17:01:35 * ** * 4

17:01:55 * ** * 0

17:02:35 * ** * 0

17:03:15 * ** * 0

17:03:55 * ** * 0

17:03:58 * ** * 2

17:04:24 * ** * 3

17:04:35 * ** *

17:05:15 * ** * 0

17:05:40 * ** * 0

17:05:46 * ** * 14

17:05:47 * ** * 0

17:05:50 * ** * 2

17:06:30 * ** * 0

17:06:37 * ** * 1

17:07:10 * ** * 0

17:07:50 * ** * 0

17:08:12 * ** * 1

17:08:30 * ** * 0

17:09:10 * ** * 0

17:09:27 * ** * 42

17:09:50 * ** * 0

3 个答案:

答案 0 :(得分:2)

declare @Start time
declare @end time
declare @request int

set @Start = '08:00:00'
set @end = '16:00:00'
set @request = 1

;with Dates as (
    select @request as reqId,@Start as reqDate
    union all
    select reqId+1,DATEADD(MINUTE,10,reqDate) from Dates
    where reqDate < @end
)
select reqId,convert(varchar(8),reqDate,100)+'-'+convert(varchar(8),DATEADD(MINUTE,10,reqDate),100) "Time Interval" from Dates

将此用于您的报告

答案 1 :(得分:1)

查看DateDiff

SELECT DATEDIFF(second, '2000-01-01 08:00:00' , '2000-01-01 16:00:00');

以秒为单位返回差异/间隔。除以60得到分钟,再除以60得到几小时。

由于您只使用时间组件,因此您可以将日期部分设置为您喜欢的任何部分。

编辑:

由于我误解了这个问题,也许你想要这样的事情:

DateTime startAt = new DateTime(2000, 01, 01, 8, 0, 0);
DateTime endAt = new DateTime(2000, 01, 01, 16, 0, 0);

for (DateTime date = startAt; date < endAt; date = date.AddMinutes(10))
{
    // create something with this interval
    Console.WriteLine(string.Format("Interval start: {0}, Interval End: {1}", date.ToString("HH:mm"), date.AddMinutes(10).ToString("HH:mm")));
}

只需使用开始日期和结束日期,并以10分钟的间隔循环播放。

答案 2 :(得分:0)

以下是使用CTE

的解决方案
DECLARE @StartDate DATETIME, @EndTime DATETIME

SELECT @StartDate = '8:00 PM'
SELECT @EndTime = '9:00 PM'


;WITH time_cte(StartTime, EndTime) AS
(
   SELECT @StartDate StartTime, DATEADD(mi, 10, @StartDate) EndTime

   UNION ALL

   SELECT EndTime, DATEADD(mi, 10, EndTime)  FROM time_cte
   WHERE EndTime < @EndTime

)  
SELECT * FROM time_cte

检查其工作在SQL Fiddle