2016-08-04 116 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

相关问题