2016-08-04 75 views
-3

需要更改以下代碼以獲取上個月的第一天(2016年7月1日)和目前的第一天:需要更改以下代碼以獲取上個月的第一天(2016年7月1日)和當月的第一天(2106年8月1日)

DECLARE @StartDate as Date = (SELECT cast(Dateadd(D, -(day(getdate()) - 1), getdate()) as date)) 
DECLARE @EndDate as Date = (SELECT dateadd(M,1,cast(Dateadd(D, -(day(getdate()) - 1), getdate()) as date))) 
DECLARE @EndDate2 as Date = (SELECT cast(getdate() as date)) 
+0

使用合適的軟件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服務器2014'。語法和功能的差異往往會影響答案。 – HABO

回答

0

首先獲得當月的月份的第一次約會,然後使用該值來獲得一個前一個月的第一天:

DECLARE @Current DATE = CAST(DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0) AS DATE) 

DECLARE @Prior DATE = CAST(DATEADD(MM,-1,@Current) AS DATE) 
+0

嘗試了以上,並得到以下錯誤:必須聲明標量變量「@Current」。 Msg 137,Level 15,State 2,Line 40 必須聲明標量變量「@EndDate」 – user3691479

+1

您的代碼有其他錯誤導致該錯誤。發佈剩餘的代碼。 – Nicarus

+0

代碼太長,無法發表評論部分:( – user3691479

0

更改代碼中的前兩行:

DECLARE @StartDate as Date = (SELECT cast(Dateadd(D, -(day(getdate()) - 1), getdate()) as date)) 
DECLARE @EndDate as Date = (SELECT dateadd(M,1,cast(Dateadd(D, -(day(getdate()) - 1), getdate()) as date))) 

到:

DECLARE @StartDate as Date = (SELECT DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0)); 
DECLARE @EndDate as Date = (SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)); 

說明:

DATEDIFF(mm,0,getdate()), 0)獲取時期和當前日期之間的月的差異。 DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))只是將這些月份重新加回到時代。

+0

嘗試上述但結果quesr有不正確的值。我的激活日期似乎是空白的,它不應該是 – user3691479

+0

根據你所問的問題,我已經將當前月份和前幾個月的第一個日期寫入'@ StartDate'和'@ EndDate',如果它仍然不是給你想要的輸出,你應該提出另外一個問題,你在'WPYUSData.sdldim.Partners'和'WPYUSData.sdldim.MerchantChannels'中的有效數據是否在要求的日期範圍內? – Ash

+0

是的,你提到的表它應該從7月1日開始並且小於8月1日所有的數據 – user3691479

相關問題