Guest User

Untitled

a guest
Jan 16th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.64 KB | None | 0 0
  1. SELECT DATEDIFF(MONTH, '2009-04-16', '2009-05-15')
  2.  
  3. 1
  4.  
  5. CREATE FUNCTION FullMonthsSeparation
  6. (
  7. @DateA DATETIME,
  8. @DateB DATETIME
  9. )
  10. RETURNS INT
  11. AS
  12. BEGIN
  13. DECLARE @Result INT
  14.  
  15. DECLARE @DateX DATETIME
  16. DECLARE @DateY DATETIME
  17.  
  18. IF(@DateA < @DateB)
  19. BEGIN
  20. SET @DateX = @DateA
  21. SET @DateY = @DateB
  22. END
  23. ELSE
  24. BEGIN
  25. SET @DateX = @DateB
  26. SET @DateY = @DateA
  27. END
  28.  
  29. SET @Result = (
  30. SELECT
  31. CASE
  32. WHEN DATEPART(DAY, @DateX) > DATEPART(DAY, @DateY)
  33. THEN DATEDIFF(MONTH, @DateX, @DateY) - 1
  34. ELSE DATEDIFF(MONTH, @DateX, @DateY)
  35. END
  36. )
  37.  
  38. RETURN @Result
  39. END
  40. GO
  41.  
  42. SELECT dbo.FullMonthsSeparation('2009-04-16', '2009-05-15') as MonthSep -- =0
  43. SELECT dbo.FullMonthsSeparation('2009-04-16', '2009-05-16') as MonthSep -- =1
  44. SELECT dbo.FullMonthsSeparation('2009-04-16', '2009-06-16') as MonthSep -- =2
  45.  
  46. select case when DATEPART(D,End_dATE) >=DATEPART(D,sTAR_dATE)
  47. THEN ( case when DATEPART(M,End_dATE) = DATEPART(M,sTAR_dATE) AND DATEPART(YYYY,End_dATE) = DATEPART(YYYY,sTAR_dATE)
  48. THEN 0 ELSE DATEDIFF(M,sTAR_dATE,End_dATE)END )
  49. ELSE DATEDIFF(M,sTAR_dATE,End_dATE)-1 END
  50.  
  51. months_between(to_date ('2009/05/15', 'yyyy/mm/dd'),
  52. to_date ('2009/04/16', 'yyyy/mm/dd'))
  53.  
  54. round(months_between(to_date ('2009/05/15', 'yyyy/mm/dd'),
  55. to_date ('2009/04/16', 'yyyy/mm/dd')))
  56.  
  57. datediff(month, dateadd(day,-day(startDate)+1,start),dateadd(day,-day(startDate)+1,endDate))
  58.  
  59. SELECT DATEDIFF(DAY, '2009-04-16', '2009-05-15')/30
  60. , DATEDIFF(DAY, '2009-04-16', '2009-05-16')/30
  61. , DATEDIFF(DAY, '2009-04-16', '2009-06-16')/30
  62.  
  63. trunc(Months_Between(date2, date1))
  64.  
  65. SELECT 12 * (YEAR(end_date) - YEAR(start_date)) +
  66. ((MONTH(end_date) - MONTH(start_date))) +
  67. SIGN(DAY(end_date) / DAY(start_date));
  68.  
  69. WITH
  70. -- Count how many months must be added to @StartDate to exceed @DueDate
  71. MONTHS_SINCE(n, [Month_hence], [IsFull], [RemainingDays] ) AS (
  72. SELECT
  73. 1 as n,
  74. DATEADD(Day, -1, DATEADD(Month, 1, @StartDate)) AS Month_hence
  75. ,CASE WHEN (DATEADD(Day, -1, DATEADD(Month, 1, @StartDate)) <= @LastDueDate)
  76. THEN 1
  77. ELSE 0
  78. END AS [IsFull]
  79. ,DATEDIFF(day, @StartDate, @LastDueDate) as [RemainingDays]
  80. UNION ALL
  81. SELECT
  82. n+1,
  83. --DateAdd(Month, 1, Month_hence) as Month_hence -- No, causes propagation of short month discounted days
  84. DATEADD(Day, -1, DATEADD(Month, n+1, @StartDate)) as Month_hence
  85. ,CASE WHEN (DATEADD(Day, -1, DATEADD(Month, n+1, @StartDate)) <= @LastDueDate)
  86. THEN 1
  87. ELSE 0
  88. END AS [IsFull]
  89. ,DATEDIFF(day, DATEADD(Day, -1, DATEADD(Month, n, @StartDate)), @LastDueDate)
  90. FROM MONTHS_SINCE
  91. WHERE Month_hence<( @LastDueDate --WHERE Period= 1
  92. )
  93. ), --SELECT * FROM MONTHS_SINCE
  94. MONTH_TALLY (full_months_over_all_terms, months_over_all_terms, days_in_incomplete_month ) AS (
  95. SELECT
  96. COALESCE((SELECT MAX(n) FROM MONTHS_SINCE WHERE isFull = 1),1) as full_months_over_all_terms,
  97. (SELECT MAX(n) FROM MONTHS_SINCE ) as months_over_all_terms,
  98. COALESCE((SELECT [RemainingDays] FROM MONTHS_SINCE WHERE isFull = 0),0) as days_in_incomplete_month
  99. ) SELECT * FROM MONTH_TALLY;
  100.  
  101. Select Name,
  102. (SELECT CASE WHEN
  103. DATEPART(DAY, '2016-08-28') > DATEPART(DAY, '2016-09-29')
  104. THEN DATEDIFF(MONTH, '2016-08-28', '2016-09-29') - 1
  105. ELSE DATEDIFF(MONTH, '2016-08-28', '2016-09-29') END) as NumberOfMonths
  106.  
  107. FROM
  108. tableExample;
  109.  
  110. DECLARE @Time1 DATETIME
  111. SET @Time1 = '12/14/2015'
  112.  
  113. DECLARE @Time2 DATETIME
  114. SET @Time2 = '12/15/2016'
  115.  
  116. SELECT
  117. Linear_YearMonths = (centuries.century + decades.decade + years.[year] + months.[Month]),
  118. 1 AS value
  119. INTO #linear_months
  120. FROM
  121. (SELECT '18' [century] UNION ALL
  122. SELECT '19' UNION ALL
  123. SELECT '20') centuries
  124. CROSS JOIN
  125. (SELECT '0' [decade] UNION ALL
  126. SELECT '1' UNION ALL
  127. SELECT '2' UNION ALL
  128. SELECT '3' UNION ALL
  129. SELECT '4' UNION ALL
  130. SELECT '5' UNION ALL
  131. SELECT '6' UNION ALL
  132. SELECT '7' UNION ALL
  133. SELECT '8' UNION ALL
  134. SELECT '9') decades
  135. CROSS JOIN
  136. (SELECT '1' [year] UNION ALL
  137. SELECT '2' UNION ALL
  138. SELECT '3' UNION ALL
  139. SELECT '4' UNION ALL
  140. SELECT '5' UNION ALL
  141. SELECT '6' UNION ALL
  142. SELECT '7' UNION ALL
  143. SELECT '8' UNION ALL
  144. SELECT '9' UNION ALL
  145. SELECT '0') years
  146. CROSS JOIN
  147. (SELECT '-01' [month] UNION ALL
  148. SELECT '-02' UNION ALL
  149. SELECT '-03' UNION ALL
  150. SELECT '-04' UNION ALL
  151. SELECT '-05' UNION ALL
  152. SELECT '-06' UNION ALL
  153. SELECT '-07' UNION ALL
  154. SELECT '-08' UNION ALL
  155. SELECT '-09' UNION ALL
  156. SELECT '-10' UNION ALL
  157. SELECT '-11' UNION ALL
  158. SELECT '-12') [months]
  159. ORDER BY 1
  160.  
  161. SELECT
  162. Time1 = @Time1,
  163. [YYYY-MM of Time1] = CASE
  164. WHEN LEFT(MONTH(@Time1),1) <> '1' OR MONTH(@Time1) = '1'
  165. THEN (CAST(YEAR(@Time1) AS VARCHAR) + '-' + '0' + CAST(MONTH(@Time1) AS VARCHAR))
  166. ELSE (CAST(YEAR(@Time1) AS VARCHAR) + '-' + CAST(MONTH(@Time1) AS VARCHAR))
  167. END,
  168. Time2 = @Time2,
  169. [YYYY-MM of Time2] = CASE
  170. WHEN LEFT(MONTH(@Time2),1) <> '1' OR MONTH(@Time2) = '1'
  171. THEN (CAST(YEAR(@Time2) AS VARCHAR) + '-' + '0' + CAST(MONTH(@Time2) AS VARCHAR))
  172. ELSE (CAST(YEAR(@Time2) AS VARCHAR) + '-' + CAST(MONTH(@Time2) AS VARCHAR))
  173. END
  174. INTO #datepoints
  175.  
  176. SELECT
  177. d.*,
  178. Months_Between = (SELECT (SUM(l.value) - 1) FROM #linear_months l
  179. WHERE l.[Linear_YearMonths] BETWEEN d.[YYYY-MM of Time1] AND d.[YYYY-MM of Time2])
  180. FROM #datepoints d
  181.  
  182. SELECT
  183. d.*,
  184. Months_Between = (SELECT (SUM(l.value) - 1) FROM AZ_VBP.[MY].[edg_Linear_YearMonths] l
  185. WHERE l.[Linear_YearMonths] BETWEEN d.[YYYY-MM of Time1] AND d.[YYYY-MM of Time2])
  186. + (CASE WHEN DAY(Time1) < DAY(Time2)
  187. THEN -1
  188. ELSE 0
  189. END)
  190. FROM #datepoints d
  191.  
  192. select CAST(DATEDIFF(MONTH, StartDate, EndDate) AS float) -
  193. (DATEPART(dd,StartDate) - 1.0) / DATEDIFF(DAY, StartDate, DATEADD(MONTH, 1, StartDate)) +
  194. (DATEPART(dd,EndDate)*1.0 ) / DATEDIFF(DAY, EndDate, DATEADD(MONTH, 1, EndDate))
  195.  
  196. DECLARE @First date = '2015-08-31'
  197. DECLARE @Last date = '2016-02-28'
  198.  
  199. SELECT
  200. @First as [First],
  201. @Last as [Last],
  202. DateDiff(Month, @First, @Last) as [DateDiff Thinks],
  203. CASE
  204. WHEN DATEADD(Month, DATEDIFF(Month, @First, @Last) +1, @First) <= @Last Then DATEDIFF(Month, @First, @Last) +1
  205. WHEN DATEADD(Month, DATEDIFF(Month, @First, @Last) , @First) <= @Last Then DATEDIFF(Month, @First, @Last)
  206. WHEN DATEADD(Month, DATEDIFF(Month, @First, @Last) -1, @First) <= @Last Then DATEDIFF(Month, @First, @Last) -1
  207. END as [Actual Months Apart]
  208.  
  209. Declare @Start DateTime
  210. Declare @End DateTime
  211.  
  212. Set @Start = '11/1/07'
  213. Set @End = '2/29/08'
  214.  
  215. Select DateDiff(Month, @Start, @End + 1)
Add Comment
Please, Sign In to add comment