Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------------------------------------------------
- | Record id | date_from | date_to |
- ----------------------------------------------------------------
- | A | 2017-02-03 08:00:00.000 | 2017-02-04 17:00:00.000|
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- | Record id | date_from | date_to |
- ----------------------------------------------------------------
- | A | 2017-02-03 08:00:00.000 | 2017-02-03 23:59:59.000|
- ----------------------------------------------------------------
- | A | 2017-02-04 00:00:00.000 | 2017-02-04 17:00:00.000|
- ----------------------------------------------------------------
- DECLARE @T TABLE (RecordID int, date_from datetime2(0), date_to datetime2(0));
- INSERT INTO @T (RecordID, date_from, date_to) VALUES
- (1, '2017-02-03 08:00:00' , '2017-02-04 17:00:00'),
- (2, '2017-02-05 08:00:00' , '2017-02-05 17:00:00'),
- (3, '2017-02-06 08:00:00' , '2017-02-10 17:00:00');
- WITH
- CTE_Numbers1(n)
- AS
- (
- SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
- SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
- SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
- )
- ,CTE_Numbers
- AS
- (
- SELECT ROW_NUMBER() OVER (ORDER BY n) AS Number
- FROM CTE_Numbers1
- )
- SELECT
- T.RecordID
- ,CASE WHEN CA.Number0 = 0
- THEN date_from
- ELSE DATEADD(day, CA.Number0, CAST(T.date_from as date))
- END AS new_date_from
- ,CASE WHEN CA.Number0 = DATEDIFF(day, T.date_from, T.date_to)
- THEN date_to
- ELSE DATEADD(day, CA.Number0 + 1, CAST(T.date_from as date))
- END AS new_date_to
- FROM
- @T AS T
- CROSS APPLY
- (
- SELECT CTE_Numbers.Number - 1 AS Number0
- FROM CTE_Numbers
- WHERE CTE_Numbers.Number <= DATEDIFF(day, T.date_from, T.date_to) + 1
- ) AS CA
- ORDER BY
- RecordID
- ,new_date_from
- ;
- +----------+---------------------+---------------------+
- | RecordID | new_date_from | new_date_to |
- +----------+---------------------+---------------------+
- | 1 | 2017-02-03 08:00:00 | 2017-02-04 00:00:00 |
- | 1 | 2017-02-04 00:00:00 | 2017-02-04 17:00:00 |
- | 2 | 2017-02-05 08:00:00 | 2017-02-05 17:00:00 |
- | 3 | 2017-02-06 08:00:00 | 2017-02-07 00:00:00 |
- | 3 | 2017-02-07 00:00:00 | 2017-02-08 00:00:00 |
- | 3 | 2017-02-08 00:00:00 | 2017-02-09 00:00:00 |
- | 3 | 2017-02-09 00:00:00 | 2017-02-10 00:00:00 |
- | 3 | 2017-02-10 00:00:00 | 2017-02-10 17:00:00 |
- +----------+---------------------+---------------------+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement