Sql-server – Convert list of dates in a date range in SQL Server
datesql server
Convert list of dates in a date range in SQL Server
For ex:
Best Answer
It's classic "islands" problem.
Here is "classic" solution:
declare @t table (dt date);
insert into @t(dt) values
('20180202'),
('20180203'),
('20180204'),
('20180205'),
('20180209'),
('20180212'),
('20180213');
with c as
(
select dt, dateadd(day, -1 * dense_rank() over(order by dt), dt) as grp
from @t
)
select min(dt) as start_range, max(dt) as end_range
from c
group by grp;
SELECT A.* FROM table1 A INNER JOIN
(
SELECT '2015-03-01' dtcolumn
UNION SELECT '2015-03-15'
UNION SELECT '2015-04-01'
UNION SELECT '2015-04-15'
UNION SELECT '2015-05-01'
) B ON
A.dtcolumn >= B.dtcolumn
AND A.dtcolumn < B.dtcolumn + INTERVAL 1 DAY;
SUGGESTION #2
SELECT * FROM table1 WHERE
(column >= '2015-03-01' AND
column < '2015-03-01' + INTERVAL 1 DAY)
UNION
SELECT * FROM table1 WHERE
(column >= '2015-03-15' AND
column < '2015-03-15' + INTERVAL 1 DAY)
UNION
SELECT * FROM table1 WHERE
(column >= '2015-04-01' AND
column < '2015-04-01' + INTERVAL 1 DAY)
UNION
SELECT * FROM table1 WHERE
(column >= '2015-04-15' AND
column < '2015-04-15' + INTERVAL 1 DAY)
UNION
SELECT * FROM table1 WHERE
(column >= '2015-05-01' AND
column < '2015-05-01' + INTERVAL 1 DAY);
Best Answer
It's classic "islands" problem.
Here is "classic" solution: