add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
select @@version;
(No column name)
Microsoft SQL Server 2019 (RTM-CU16) (KB5011644) - 15.0.4223.1 (X64)
Apr 11 2022 16:24:07
Copyright (C) 2019 Microsoft Corporation
Express Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor)
CREATE TABLE Item (
Item_No int PRIMARY KEY IDENTITY ,
ActivityName NVARCHAR(200),
StartDate DATETIME,
EndDate DATETIME,
)
INSERT INTO Item
(ActivityName, StartDate, EndDate)
VALUES
('test01', '2020-08-05', '2020-08-09'),
('test02', '2020-08-07', '2020-08-11'),
('test03', '2020-07-29', '2020-08-03'),
('test04', '2020-08-29', '2020-09-03'),
('test05', '2020-09-10', '2020-09-13'),
('test06', '2020-08-14', '2020-08-16')
6 rows affected
WITH dates AS (
SELECT StartDate AS [Date], ActivityName, StartDate, EndDate
FROM Item
WHERE (StartDate >= '2020-08-01' AND StartDate <= '2020-08-31') OR
(EndDate >= '2020-08-01' AND EndDate <= '2020-08-31' )
UNION ALL
SELECT [Date] = DATEADD(DAY, 1, [Date]), ActivityName, StartDate, EndDate
FROM dates
WHERE Date < EndDate
)

SELECT ActivityName,
CAST([Date] AS DATE) AS [Date],
CAST(StartDate AS DATE) AS StartDate,
CAST(EndDate AS DATE) AS EndDate
FROM dates
WHERE [Date] >= '2020-08-01' AND [Date] <= '2020-08-31'
ORDER BY StartDate, [Date];
ActivityName Date StartDate EndDate
test03 2020-08-01 2020-07-29 2020-08-03
test03 2020-08-02 2020-07-29 2020-08-03
test03 2020-08-03 2020-07-29 2020-08-03
test01 2020-08-05 2020-08-05 2020-08-09
test01 2020-08-06 2020-08-05 2020-08-09
test01 2020-08-07 2020-08-05 2020-08-09
test01 2020-08-08 2020-08-05 2020-08-09
test01 2020-08-09 2020-08-05 2020-08-09
test02 2020-08-07 2020-08-07 2020-08-11
test02 2020-08-08 2020-08-07 2020-08-11
test02 2020-08-09 2020-08-07 2020-08-11
test02 2020-08-10 2020-08-07 2020-08-11
test02 2020-08-11 2020-08-07 2020-08-11
test06 2020-08-14 2020-08-14 2020-08-16
test06 2020-08-15 2020-08-14 2020-08-16
test06 2020-08-16 2020-08-14 2020-08-16
test04 2020-08-29 2020-08-29 2020-09-03
test04 2020-08-30 2020-08-29 2020-09-03
test04 2020-08-31 2020-08-29 2020-09-03
WITH dates AS (
SELECT StartDate AS [Date], ActivityName, StartDate, EndDate
FROM Item
WHERE (StartDate >= '2020-08-01' AND StartDate <= '2020-08-31') OR
(EndDate >= '2020-08-01' AND EndDate <= '2020-08-31' )
UNION ALL
SELECT [Date] = DATEADD(DAY, 1, [Date]), ActivityName, StartDate, EndDate
FROM dates
WHERE Date < EndDate
)
SELECT DISTINCT CAST([Date] AS DATE) AS [Date]
FROM dates
WHERE [Date] >= '2020-08-01' AND [Date] <= '2020-08-31'
ORDER BY [Date]
Date
2020-08-01
2020-08-02
2020-08-03
2020-08-05
2020-08-06
2020-08-07
2020-08-08
2020-08-09
2020-08-10
2020-08-11
2020-08-14
2020-08-15
2020-08-16
2020-08-29
2020-08-30
2020-08-31