SQL - 修改日期

时间:2016-07-07 17:20:53

标签: sql sql-server sql-server-2012

在SQL中获取日期变量并将其设置为Year of Year和Year of Year的最佳方法是什么?

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

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

3 个答案:

答案 0 :(得分:2)

我只会使用datefromparts()

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

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

答案 1 :(得分: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

答案 2 :(得分: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
SQL Server 2008及更高版本中提供了

year