2017-05-03 34 views
1

我對SQL相當新,但我正在編輯我們有的存儲過程,因此我們不需要手動輸入@StartDate和@EndDate值。 代碼如下。基本上我想StartDate是上個月的開始,EndDate是當前日期。 這可能很簡單,但我無法在網上找到任何與我們的問題相關的內容。存儲過程,返回startdate作爲月份開始

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

什麼是參數(日期,日期時間,VARCHAR)和你爲什麼經過一段時間的組件類型?日期是否以'date'或'datetime'存儲爲非零時間部分? –

+0

您的示例和您的評論不匹配,只會造成混淆和延遲。也許你的意思是說,@EndDate的價值應該是上個月的最後一天,時間分量如你在例子中指出的那樣設置? – SMor

+0

嗨,對不起。 @EndDate應該是上個月的最後一個日期。我將嘗試一些列出的建議,看看他們是否解決了這個問題。感謝您的反饋。 –

回答

1

要獲得最後一個月的第一天,你這樣做:

SELECT DATEADD(月,-1,DATEADD(毫米,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 
+0

你不需要在變量聲明中使用'SELECT' –

+0

是的!該值可以直接分配,我將編輯答案。我自己使用它可以在不寫另一個「select @firstDayLastMonth」語句的情況下進行選擇:) –

+0

這正是我所期待的。非常感謝! –

1

你可以得到的最後一個月一天一個SPE cific一天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 

這將工作,如果日期使用的是IE沒有時間分量date類型或datetime存儲爲...日期。如果沒有,你必須增加一個時間偏移@end,如:

declare @start date=getdate(), @endDay datetime=cast(getdate() as date) 
declare @end datetime = @endDay + cast('23:59:59' as datetime)