知道SQL SERVER的日期间隔是15分钟

知道SQL SERVER的日期间隔是15分钟,sql,sql-server,date,Sql,Sql Server,Date,我有以下表格结构: CREATE TABLE TIMETABLE ([ID] int, [Name] varchar(50), [StartDate] datetime, [EndDate] datetime) ; INSERT INTO TIMETABLE ([ID], [Name], [StartDate], [EndDate]) VALUES (1, 'John', '2017-01-29 16:00:00.000', '2017-01-29 16:12:00.

我有以下表格结构:

CREATE TABLE TIMETABLE
    ([ID] int, [Name] varchar(50), [StartDate] datetime, [EndDate] datetime)
;

INSERT INTO TIMETABLE
    ([ID], [Name], [StartDate], [EndDate])
VALUES
    (1, 'John',  '2017-01-29 16:00:00.000', '2017-01-29 16:12:00.000'),
    (2, 'Mario',  '2017-01-29 16:17:00.000', '2017-01-29 16:29:00.000'),
    (3, 'Kate',  '2017-01-15 10:35:00.000', '2017-01-15 10:40:00.000'),
    (4, 'Maria', '2017-01-15 10:17:00.000', '2017-01-15 10:27:00.000'),
    (5, 'Oliver',  '2017-01-15 13:46:00.000', '2017-01-29 14:00:00.000')
;
结果是:

select * from TIMETABLE

ID  Name    StartDate               EndDate
1   John    2017-01-29T16:00:00Z    2017-01-29T16:12:00Z
2   Mario   2017-01-29T16:17:00Z    2017-01-29T16:29:00Z
3   Kate    2017-01-15T10:35:00Z    2017-01-15T10:40:00Z
4   Maria   2017-01-15T10:17:00Z    2017-01-15T10:27:00Z
5   Oliver  2017-01-15T13:46:00Z    2017-01-29T14:00:00Z
我想知道15分钟范围内的日期,例如:

   ID   Name    StartDate               EndDate                HourRangeTime
    1   John    2017-01-29T16:00:00Z    2017-01-29T16:12:00Z   16:00
在本例中,开始日期和结束日期在16:00和16:12之间,在16:00之间

结果应该是这样的:

ID  Name    StartDate               EndDate                   HourRangeTime
1   John    2017-01-29T16:00:00Z    2017-01-29T16:12:00Z      16:00
2   Mario   2017-01-29T16:17:00Z    2017-01-29T16:29:00Z      16:15
3   Kate    2017-01-15T10:35:00Z    2017-01-15T10:40:00Z      10:30
4   Maria   2017-01-15T10:17:00Z    2017-01-15T10:27:00Z      10:15
5   Oliver  2017-01-15T13:46:00Z    2017-01-29T14:00:00Z      13:45

我如何填写HourRangeTime列,记录日期并查看它属于哪个范围?

您的注意力似乎集中在
开始日期上

一种相对通用的方法是将其转换为分钟,然后将分钟截断为最接近的15分钟。以下是代码:

select cast(dateadd(minute,
                    15 * (datediff(minute, 0,
                                   cast(StartDate as time)
                                  ) / 15
                         ), 0
                   ) as time)

这会将结果返回为
时间

您可以获得差异并处理未来

SELECT StartTime, EndTime, DATEDIFF(MINUTE, StartTime , EndTime) AS MinuteDiff 
FROM TIMETABLE

您可以尝试以下方法获得所需的输出:

SELECT 
    CONCAT(DATEPART(hh,StartDate), ':', 
        CASE 
            WHEN DATEPART(MINUTE,StartDate) BETWEEN 0 AND 14 THEN '00'
            WHEN DATEPART(MINUTE,StartDate) BETWEEN 15 AND 29 THEN '15'
            WHEN DATEPART(MINUTE,StartDate) BETWEEN 30 AND 44 THEN '30'
            WHEN DATEPART(MINUTE,StartDate) BETWEEN 45 AND 59 THEN '45'
        ELSE '00'
        END) AS HourRangeTime 
FROM TIMETABLE
输出:

HourRangeTime
-------------
16:00
16:15
10:30
10:15
13:45
你可以用这个

SELECT *,  
    CONVERT(VARCHAR,DATEPART(HOUR, [StartDate])) 
    + ':' 
    + RIGHT(CONVERT(VARCHAR,(DATEPART(MINUTE, [StartDate]) / 15) * 15)+'0',2) HourRangeTime FROM TIMETABLE