2016-07-07 154 views
1

在SQL中采用日期变量并将其设置为年初和年底的最佳方式是什么?SQL - 修改日期

declare @calcDate date = '7/7/2016' 

如何使用@calcDate获得'1/1/2016'和'12/31/2016'?

+1

请使用您正在使用的数据库引擎的标签。它甚至建议你在询问 – Lamak

+0

时这样做,我不确定我是否理解你在问什么。我应该添加哪些其他标签? – Anagins

+0

[sql]是语言,你可以使用SQL Server,MySQL,Oracle,Postgresql等。答案取决于你正在使用哪一个,所以在你的问题中加上相应的标签 – Lamak

回答

1
DECLARE @calcDate date = '7/7/2016' 

SELECT 
DATEADD(yy, DATEDIFF(yy,0,@calcDate), 0) AS BeginningOfYear, 
DATEADD(yy, DATEDIFF(yy,0,@calcDate) + 1, -1) AS EndOfYear 
+0

这个答案看起来是正确的为什么没有评论的投票? –

+0

@DaveKelly不是我的失望,但是这个答案是在没有关于RDBMS的标签时发布的,所以它可能对op来说是错误的。在这种情况下,它不是 – Lamak

2

我只想用datefromparts()

select datefromparts(year(@calcdate), 1, 1) as soy, 
     datefromparts(year(@calcdate), 12, 31) as eoy 

SQL Server早期版本的需要奇怪日期运算。此功能在SQL Server 2012+中可用(请参阅here)。

+0

我尝试使用DateFromParts时出错。此功能是否需要特定版本的SQL Service 2012? – Anagins

+1

@ inVad3r您可能会在以前版本的数据库上使用SQL Server Management Studio 2012 – Lamak

+0

您应该正确。我对这种混乱表示抱歉。 – Anagins

0

对我来说似乎没有真正的“计算”在这里完成,因为今年的第一天总是1/1,最后一天总是12/31。我们只需要在问题这些追加的一年:

declare @calcDate date = '7/7/2016' 
select cast(cast(year(@calcDate) as varchar(4)) + '0101' as date) 
select cast(cast(year(@calcDate) as varchar(4)) + '1231' as date) 

结果:

2016-01-01 
2016-12-31 

year是在SQL Server 2008及更高版本。