Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. ----------------------------------------------------------------
  2. | Record id | date_from | date_to |
  3. ----------------------------------------------------------------
  4. | A | 2017-02-03 08:00:00.000 | 2017-02-04 17:00:00.000|
  5. ----------------------------------------------------------------
  6.  
  7. ----------------------------------------------------------------
  8. | Record id | date_from | date_to |
  9. ----------------------------------------------------------------
  10. | A | 2017-02-03 08:00:00.000 | 2017-02-03 23:59:59.000|
  11. ----------------------------------------------------------------
  12. | A | 2017-02-04 00:00:00.000 | 2017-02-04 17:00:00.000|
  13. ----------------------------------------------------------------
  14.  
  15. DECLARE @T TABLE (RecordID int, date_from datetime2(0), date_to datetime2(0));
  16.  
  17. INSERT INTO @T (RecordID, date_from, date_to) VALUES
  18. (1, '2017-02-03 08:00:00' , '2017-02-04 17:00:00'),
  19. (2, '2017-02-05 08:00:00' , '2017-02-05 17:00:00'),
  20. (3, '2017-02-06 08:00:00' , '2017-02-10 17:00:00');
  21.  
  22. WITH
  23. CTE_Numbers1(n)
  24. AS
  25. (
  26. SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
  27. SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
  28. SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
  29. )
  30. ,CTE_Numbers
  31. AS
  32. (
  33. SELECT ROW_NUMBER() OVER (ORDER BY n) AS Number
  34. FROM CTE_Numbers1
  35. )
  36. SELECT
  37. T.RecordID
  38. ,CASE WHEN CA.Number0 = 0
  39. THEN date_from
  40. ELSE DATEADD(day, CA.Number0, CAST(T.date_from as date))
  41. END AS new_date_from
  42. ,CASE WHEN CA.Number0 = DATEDIFF(day, T.date_from, T.date_to)
  43. THEN date_to
  44. ELSE DATEADD(day, CA.Number0 + 1, CAST(T.date_from as date))
  45. END AS new_date_to
  46. FROM
  47. @T AS T
  48. CROSS APPLY
  49. (
  50. SELECT CTE_Numbers.Number - 1 AS Number0
  51. FROM CTE_Numbers
  52. WHERE CTE_Numbers.Number <= DATEDIFF(day, T.date_from, T.date_to) + 1
  53. ) AS CA
  54. ORDER BY
  55. RecordID
  56. ,new_date_from
  57. ;
  58.  
  59. +----------+---------------------+---------------------+
  60. | RecordID | new_date_from | new_date_to |
  61. +----------+---------------------+---------------------+
  62. | 1 | 2017-02-03 08:00:00 | 2017-02-04 00:00:00 |
  63. | 1 | 2017-02-04 00:00:00 | 2017-02-04 17:00:00 |
  64. | 2 | 2017-02-05 08:00:00 | 2017-02-05 17:00:00 |
  65. | 3 | 2017-02-06 08:00:00 | 2017-02-07 00:00:00 |
  66. | 3 | 2017-02-07 00:00:00 | 2017-02-08 00:00:00 |
  67. | 3 | 2017-02-08 00:00:00 | 2017-02-09 00:00:00 |
  68. | 3 | 2017-02-09 00:00:00 | 2017-02-10 00:00:00 |
  69. | 3 | 2017-02-10 00:00:00 | 2017-02-10 17:00:00 |
  70. +----------+---------------------+---------------------+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement