2016-07-07 207 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及更高版本。