繁体   English   中英

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

[英]How To Set Time Interval using 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结构

使用下面的数据现在iam试图在workdatetime的开始时间和此workdatetime的最后一个之间设置no键

逻辑是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

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

将此用于您的报告

看看DateDiff

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

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

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

编辑:

既然我误解了这个问题,也许你想要这样的东西:

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分钟的间隔循环播放。

这是使用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的工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM