声明一个日期是另一个日期的最后一个月
Declaring a date as being the last month day of another date
我正在尝试使用 SQL Server Studio 在我们的 SAP B1 系统上编写财务报告。
在我的报告中,我希望按月计算信息。在我的报告中,我的@start date 为@Startofcurrentfinancialyear,结束日期为 DD+30(因为这个月有 31 天)但是我想要 mm+1 和 dd-1 将我带到最后一天这个月。
我计划更改每个月的报告以提供以下信息。
MM+1(第 2 个月)和 MM+2 - DD 1 给我第 2 个月的日期范围等
目前,我可以根据以下条件进行操作:MM+0、DD+30,然后继续执行 DD+60 等并计算每个月有多少天,但这会给我带来问题有闰年。
DECLARE @Start DATETIME = DATEADD(MM,-0,@StartOfCurrentFinancialYear)
DECLARE @End DATETIME = DATEADD(DD,+30,@StartOfCurrentFinancialYear)
我希望能够为每个部分定义一个月份,并根据上面给出的参数给出定义月份的最后一天。
如果你想要月底,那么在所有支持的SQL服务器版本中,你可以这样做:
DECLARE @Start DATETIME = DATEADD(MONTH, -0, @StartOfCurrentFinancialYear);
DECLARE @End DATETIME = EOMONTH(@StartOfCurrentFinancialYear);
如果您使用的是不受支持的版本,您可以进行日期运算:
DECLARE @End DATETIME = DATEADD(day, -1,
DATEADD(month, 1,
DATEADD(day,
1 - DAY(@StartOfCurrentFinancialYear),
@StartOfCurrentFinancialYear
),
)
);
这会进行以下计算:
- 最内层子查询
dateadd()
移动到该月的第一天。
- 中间子查询增加一个月。
- 外查询减1天
如果您想要月初和月底,您可以使用 DateAdd
函数来获取它,例如:
DECLARE @Start DATETIME = DATEADD(DAY, (DAY(GETDATE()) * -1) + 1, GETDATE())
DECLARE @End DATETIME = DATEADD(MONTH,1,DATEADD(DAY, DAY(GETDATE()) * -1, GETDATE()))
SELECT @Start, @End
您可以将 GETDATE() 替换为您的日期变量,因此在替换后代码应如下所示:
声明@StartOfCurrentFinancialYear 作为日期 = '31/aug/2019'
DECLARE @Start DATETIME = DATEADD(DAY, (DAY(@StartOfCurrentFinancialYear) * -1) + 1, @StartOfCurrentFinancialYear)
DECLARE @End DATETIME = DATEADD(MONTH,1,DATEADD(DAY, DAY(@StartOfCurrentFinancialYear) * -1, @StartOfCurrentFinancialYear))
SELECT @Start, @End
我正在尝试使用 SQL Server Studio 在我们的 SAP B1 系统上编写财务报告。
在我的报告中,我希望按月计算信息。在我的报告中,我的@start date 为@Startofcurrentfinancialyear,结束日期为 DD+30(因为这个月有 31 天)但是我想要 mm+1 和 dd-1 将我带到最后一天这个月。
我计划更改每个月的报告以提供以下信息。 MM+1(第 2 个月)和 MM+2 - DD 1 给我第 2 个月的日期范围等
目前,我可以根据以下条件进行操作:MM+0、DD+30,然后继续执行 DD+60 等并计算每个月有多少天,但这会给我带来问题有闰年。
DECLARE @Start DATETIME = DATEADD(MM,-0,@StartOfCurrentFinancialYear)
DECLARE @End DATETIME = DATEADD(DD,+30,@StartOfCurrentFinancialYear)
我希望能够为每个部分定义一个月份,并根据上面给出的参数给出定义月份的最后一天。
如果你想要月底,那么在所有支持的SQL服务器版本中,你可以这样做:
DECLARE @Start DATETIME = DATEADD(MONTH, -0, @StartOfCurrentFinancialYear);
DECLARE @End DATETIME = EOMONTH(@StartOfCurrentFinancialYear);
如果您使用的是不受支持的版本,您可以进行日期运算:
DECLARE @End DATETIME = DATEADD(day, -1,
DATEADD(month, 1,
DATEADD(day,
1 - DAY(@StartOfCurrentFinancialYear),
@StartOfCurrentFinancialYear
),
)
);
这会进行以下计算:
- 最内层子查询
dateadd()
移动到该月的第一天。 - 中间子查询增加一个月。
- 外查询减1天
如果您想要月初和月底,您可以使用 DateAdd
函数来获取它,例如:
DECLARE @Start DATETIME = DATEADD(DAY, (DAY(GETDATE()) * -1) + 1, GETDATE())
DECLARE @End DATETIME = DATEADD(MONTH,1,DATEADD(DAY, DAY(GETDATE()) * -1, GETDATE()))
SELECT @Start, @End
您可以将 GETDATE() 替换为您的日期变量,因此在替换后代码应如下所示:
声明@StartOfCurrentFinancialYear 作为日期 = '31/aug/2019'
DECLARE @Start DATETIME = DATEADD(DAY, (DAY(@StartOfCurrentFinancialYear) * -1) + 1, @StartOfCurrentFinancialYear)
DECLARE @End DATETIME = DATEADD(MONTH,1,DATEADD(DAY, DAY(@StartOfCurrentFinancialYear) * -1, @StartOfCurrentFinancialYear))
SELECT @Start, @End