作者:人生如梦5mm_605 | 来源:互联网 | 2023-08-17 13:55
–FirstDayPreviousCurrentNextMonthsSELECTDATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())
– First Day Previous/Current/Next Months
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0),
'First Day of Previous Month'
UNION ALL
SELECT DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE())) - 1),
DATEADD(MONTH, -1, GETDATE())),
'First Day of Previous Month (2)'
UNION ALL
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0),
'First Day of Current Month'
UNION ALL
SELECT DATEADD(DAY, -(DAY(GETDATE()) - 1), GETDATE()),
'First Day of Current Month (2)'
UNION ALL
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0),
'First Day of Next Month'
UNION ALL
SELECT DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE())) - 1),
DATEADD(MONTH, 1, GETDATE())),
'First Day of Next Month (2)'
Result Set:
———————– ——————————-
2011-04-01 00:00:00.000 First Day of Previous Month
2011-04-01 15:47:36.660 First Day of Previous Month (2)
2011-05-01 00:00:00.000 First Day of Current Month
2011-05-01 15:47:36.660 First Day of Current Month (2)
2011-06-01 00:00:00.000 First Day of Next Month
2011-06-01 15:47:36.660 First Day of Next Month (2)
(6 row(s) affected)
The above queries can be generalized as below:
DECLARE @DURATION INT = 2
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + @DURATION, 0)
AS '+2 Months'
SET @DURATION = -2
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + @DURATION, 0)
AS '-2 Months'
Result Set:
+2 Months
———————–
2011-07-01 00:00:00.000
(1 row(s) affected)
-2 Months
———————–
2011-03-01 00:00:00.000
(1 row(s) affected)
And, to get last day of a month use:
– Last Day Previous/Current/Next Months
SELECT DATEADD(DAY, -(DAY(GETDATE())), GETDATE()),
'Last Day of Previous Month'
UNION ALL
SELECT DATEADD(MILLISECOND, -3,
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)),
'Last Day of Previous Month (2)'
UNION ALL
SELECT DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE()))),
DATEADD(MONTH, 1, GETDATE())),
'Last Day of Current Month'
UNION ALL
SELECT DATEADD(MILLISECOND, -3,
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)),
'Last Day of Current Month (2)'
UNION ALL
SELECT DATEADD(DAY, -(DAY(DATEADD(MONTH,0,GETDATE()))),
DATEADD(MONTH, 2, GETDATE())),
'Last Day of Next Month'
UNION ALL
SELECT DATEADD(SECOND, -1,
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 2, 0)),
'Last Day of Next Month (2)'
Result Set:
———————– ——————————
2011-04-30 15:54:35.523 Last Day of Previous Month
2011-04-30 23:59:59.997 Last Day of Previous Month (2)
2011-05-31 15:54:35.523 Last Day of Current Month
2011-05-31 23:59:59.997 Last Day of Current Month (2)
2011-06-30 15:54:35.523 Last Day of Next Month
2011-06-30 23:59:59.000 Last Day of Next Month (2)
(6 row(s) affected)
The above queries can be generalized as below:
DECLARE @DURATION INT = 2
SELECT DATEADD(MILLISECOND, -3,
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + @DURATION + 1, 0))
AS '+2 Months'
SET @DURATION = -2
SELECT DATEADD(MILLISECOND, -3,
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + @DURATION + 1, 0))
AS '-2 Months'
Result Set:
+2 Months
———————–
2011-07-31 23:59:59.997
(1 row(s) affected)
-2 Months
———————–
2011-03-31 23:59:59.997
(1 row(s) affected)
Hope This Helps!