我在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
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
实现这一点的一种方法是在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;
我认为您正在寻求将时间划分为小时,这是您可以在此处找到解决方案的相关问题。
你可以在这里找到问题的多种答案和方法。
这是Fiddle试试的链接