在SQL中获取日期变量并将其设置为Year of Year和Year of Year的最佳方法是什么?
declare @calcDate date = '7/7/2016'
如何使用@calcDate获得'1/1/2016'和'12 / 31/2016'?
答案 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
。