2014-06-25 20 views
0

选择减去一年

@begindate = dateadd(mm,-1,CAST(datepart(mm,getdate()) AS VARCHAR(2)) + '/15/' +     CAST(datepart(YYYY,getdate() -1) AS varchar(4))), 

@enddate = CAST(datepart(mm,getdate()) AS VARCHAR(2)) + '/14/' + CAST(datepart(YYYY,getdate() -1) AS varchar(4)) 

眼下这个代码返回日期5月15日至6月14日。这些是我需要的日期,但我还需要它在2013年,这返回到2014年。我试着做一个dateadd(yyyy,-1),它没有工作。所以我想知道是否有人知道我将如何获得去年的约会。

+0

为什么'dateadd(yyyy,-1,xxx)'工作? –

+1

你想做什么?所有这些拆分,拼接和连接(美国格式,绝对不标准)掩盖了你所要求的内容 –

+0

从上个月的15日到当前月份的14日的数据基于去年 – user3630473

回答

0

如果DateAdd不起作用,那么在您的实现中一定有错误。尝试像这样现有的代码之后:

SET @begindate = dateadd(year, -1, @begindate); 
SET @enddate = dateadd(year, -1, @enddate) 
+0

'@ begindate'和'@ enddate'是字符串。做任何形式的日期算术都会将它们转换为使用服务器格式的日期(很可能不是美国以外的任何人的美国格式),并且出现意外结果 –

+0

我确实假设变量是日期时间。用户没有指定,虽然他的代码构建了一个字符串,但它是一个可以隐式转换为日期并用于填充日期时间变量的字符串。有很多不同的方法来实现他想要的结果,但是我关注了使用dateadd()的方法,但这种方法没有奏效。 –

+0

知道了!谢谢 – user3630473

0

声明@BeginDate日期时间 声明@EndDate日期时间

组@BeginDate = DATEADD(毫米,-1,CAST(日期部分(毫米,GETDATE())AS VARCHAR(2))+ '/ 15 /' + CAST(datepart(YYYY,getdate()) - 1 AS varchar(4)))

set @enddate = CAST(datepart(mm,getdate())AS'VARCHAR(2))+'/ 14 /' + CAST(日期部分(YYYY,GETDATE()) - 1为varchar(4))

选择@BeginDate UNION ALL 选择@EndDate

+0

这也是我的想法,但它说AS附近的语法不正确,我不知道它有什么问题 – user3630473

+0

适用于我在SQLServer上。你在用什么? – Rich

0

而是用绳子,你可以使用日期变量日期运算作业的:

declare @lastyear date=dateadd(yy,-1,cast(getdate() as date)) 
declare @currentMonth date=dateadd(d,-day(@lastyear),@lastyear) 
declare @prevMonth date=dateadd(m,-1,@currentMonth) 

select @lastyear,DATEADD(d,14,@currentMonth),DATEADD(d,15,@prevMonth) 

在SQL Server 2012中那就更简单了,因为你可以使用DATEFROMPARTS函数从它的部分构造一个新的日期。