我对SQL很新,但我正在编辑一个我们拥有的存储过程,这样我们就不需要手动输入@StartDate和@EndDate值了。 代码如下。基本上我希望StartDate是上个月的开始,EndDate是当前日期。 这可能很简单,但我找不到任何与我们的问题相关的在线内容。
USE [OnlineOrdering]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[usp_GetPayPalOrders]
@StartDate = N'2017-01-01 00:00:00',
@EndDate = N'2017-01-31 23:59:59'
SELECT 'Return Value' = @return_value
GO
请注意,我最初没有写过这个程序,我希望能够自动化日期以使其更容易运行。
谢谢
答案 0 :(得分:1)
要获得上个月的第一天,请执行以下操作:
SELECT DATEADD(月,-1,DATEADD(mm,DATEDIFF(m,0,GETDATE()),0))
所以,你的代码是:
USE [OnlineOrdering]
GO
DECLARE @firstDayLastMonth datetime = DATEADD(month,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0)), @now datetime = GETDATE()
DECLARE @return_value int
EXEC @return_value = [dbo].[usp_GetPayPalOrders]
@StartDate = @firstDayLastMonth,
@EndDate = @now
SELECT 'Return Value' = @return_value
GO
答案 1 :(得分:1)
您可以使用EOMONTH获取特定日期的最后一个月,例如:
SELECT EOMONTH(GETDATE())
将返回2017-05-31
。
该函数接受月份偏移作为第二个参数。您可以使用以下命令获取上个月的最后一天:
SELECT EOMONTH(GETDATE(),-1)
EOMONTH适用于所有受支持的SQL Server版本,即2012及更高版本。
在你的情况下,你可以写:
declare @start date EOMONTH(GetDate(),-1), @end date = GetDate()
EXEC @return_value = [dbo].[usp_GetPayPalOrders] @start, @end
如果日期存储为...日期,即使用date
类型或datetime
没有时间组件,这将有效。如果没有,您将不得不向@end添加时间偏移,例如:
declare @start date=getdate(), @endDay datetime=cast(getdate() as date)
declare @end datetime = @endDay + cast('23:59:59' as datetime)