Guest User

Untitled

a guest
Aug 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. Easiest way to populate a temp table with dates between and including 2 date parameters
  2. 2011-01-01
  3. 2011-02-01
  4. 2011-03-01
  5. 2011-04-01
  6. 2011-05-01
  7. 2011-06-01
  8. 2011-07-01
  9. 2011-08-01
  10.  
  11. ;WITH cte AS (
  12. SELECT CASE WHEN DATEPART(Day,@StartDate) = 1 THEN @StartDate
  13. ELSE DATEADD(Month,DATEDIFF(Month,0,@StartDate)+1,0) END AS myDate
  14. UNION ALL
  15. SELECT DATEADD(Month,1,myDate)
  16. FROM cte
  17. WHERE DATEADD(Month,1,myDate) <= @EndDate
  18. )
  19. SELECT myDate
  20. FROM cte
  21. OPTION (MAXRECURSION 0)
  22.  
  23. declare @StartDate datetime
  24. declare @EndDate datetime
  25. select @StartDate = '2011-01-01' , @EndDate = '2011-08-01'
  26.  
  27. select @StartDate= @StartDate-(DATEPART(DD,@StartDate)-1)
  28.  
  29. declare @temp table
  30. (
  31. TheDate datetime
  32. )
  33. while (@StartDate<=@EndDate)
  34. begin
  35. insert into @temp
  36. values (@StartDate )
  37. select @StartDate=DATEADD(MM,1,@StartDate)
  38. end
  39. select * from @temp
  40.  
  41. DECLARE @StartDate DATETIME
  42. ,@EndDate DATETIME;
  43.  
  44. SELECT @StartDate = '20110105'
  45. ,@EndDate = '20110815';
  46.  
  47. SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, DATEADD(MONTH, v.number, @StartDate)), 0) AS FirstDay
  48. --or Andriy M suggestion:
  49. --SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @StartDate) + v.number, 0) AS FirstDay
  50. INTO #Results
  51. FROM master.dbo.spt_values v
  52. WHERE v.type = 'P'
  53. AND DATEDIFF(MONTH, @StartDate, @EndDate) >= v.number;
  54.  
  55. SELECT *
  56. FROM #Results;
  57.  
  58. DROP TABLE #Results;
  59.  
  60. FirstDay
  61. -----------------------
  62. 2011-01-01 00:00:00.000
  63. 2011-02-01 00:00:00.000
  64. 2011-03-01 00:00:00.000
  65. 2011-04-01 00:00:00.000
  66. 2011-05-01 00:00:00.000
  67. 2011-06-01 00:00:00.000
  68. 2011-07-01 00:00:00.000
  69. 2011-08-01 00:00:00.000
Add Comment
Please, Sign In to add comment