【问题标题】:please help/guide with a query split that would break a 1 hour intervals [closed]请帮助/指导将打破 1 小时间隔的查询拆分 [关闭]
【发布时间】:2023-04-25 17:43:01
【问题描述】:

我在 SQL 中有一个议程表,其中有开始时间和结束时间。 我想做的是在开始时间和结束时间之间的日期时间之间每小时分成一个小时。

例子:

----------
 start time - end time
----------
 2017-07-17 9:00 - 2017-07-17 11:00

会回来

----------
 start time  -  end time
----------
 2017-07-17 9:00 - 2017-07-17 10:00

 2017-07-17 10:00 - 2017-07-17 11:00

【问题讨论】:

标签: c# mysql sql asp.net


【解决方案1】:
DECLARE @date1 DATETIME = GETDATE()-1 , @date2 DATETIME = GETDATE()
DECLARE @tbl TABLE (Dates varchar(100))

WHILE @date1 <= @date2
BEGIN
    INSERT INTO @tbl( Dates )
    SELECT CONVERT(VARCHAR(50),@date1 ,106)+' '+ 
      CONCAT(DATEPART(HOUR,@date1),':','00') +' - '+ 
      CONVERT(VARCHAR(50),@date1 ,106)+' '+ 
      CONCAT(DATEPART(HOUR,@date1)+1,':','00')

    SET @date1 = DATEADD(HOUR,1,@date1)
END

SELECT Dates FROM @tbl

【讨论】:

    【解决方案2】:

    一种方法是在 MS SQL SERVER 中使用 CTE(假设您使用的是 MS SQL SERVER)

    DECLARE @startTime DATETIME, @endTime DATETIME;
    SET @startTime = CONVERT(DATETIME,'2018-07-17 01:00:00',120);
    SET @endTime = CONVERT(DATETIME,'2018-07-17 17:00:00',120);
    ;WITH StartEnd(startTime,endTime) as  (
    SELECT @startTime, DATEADD(hour,1,@startTime) -- ANCHOR QUERY
    UNION ALL
    SELECT endTime,DATEADD(hour,1,endTime) from StartEnd -- RECURSIVE QUERY
    WHERE endTime < @endTime    
    )
    SELECT * from StartEnd;
    

    【讨论】:

      【解决方案3】:

      我认为您正在寻找将您的时间分成几个小时的相关问题,您可以找到您的解决方案here

      您可以在此处找到问题的多个答案和方法。

      here是Fiddle的链接试试吧

      【讨论】:

      • 我不想加入工会