2009-10-06 10 views
5

SQL Server 2005のパージプロシージャで、1年以上前のテーブルのすべての行を削除しなければならない+現在の年に渡された時間。SQLで1年目の日付を取得するにはどうすればよいですか?

例:私は2009年6月10日今日の手順を実行した場合、それは(含まれており、後方それは2007年である)2008-01-01夜12時よりも古い行を削除する必要があります。

年の最初の1秒の日付を取得するにはどうすればよいですか?

私はこれ試してみた:

select cast((DATEPART(year, getdate()) -1)AS DATETIME);

を私は(予想I 誤ってなど)1905-07-02 00:00:00.000なく2008-01-01 00:00を取得します。

誰かが私を助けてくれますか?

答えて

4

これは動作します:

select cast('01 jan' + CAST((DATEPART(year, getdate())-1) as varchar) AS DATETIME); 

(私はそれが "最善の" 解決策とはおそらくないと知っています必要以上に多くのキャストを必要としますが、それは機能し、これがどのように使用されるかについては、 !maticの溶液)

+0

うーん..鉱山が唯一の1アップし、1票ダウン持って、まだ地雷が正しい答えを与える唯一のソリューションである一方で(執筆時点で)この質問に対する他の答えは、8 upvotesを持っているか興味深いです。 (今日の日付(2009年10月6日)の結果は2008-01-01 00:00:00、Rajのソリューションは2009-01-01 00:00:00に戻る – CraigTP

+1

私はSELECT CONVERT(DATETIME、CAST入力フォーマットを指定するため、YEAR(GETDATE()) - 1 AS VARCHAR)+ '0101'、112)またはSELECT CONVERT(DATETIME、CAST(YEAR(GETDATE()) - 1 AS VARCHAR)、112) – LukLed

+0

@CraigTP:あなたが正しい答えを持っていたので、私はあなた自身をあきらめました。私は訂正を反映するように鉱山を変更しました –

11

編集:これは、前年の質問であった今年の帰りであった。これを反映するようにコードが修正されました。

使用この

select DATEADD(yy, DATEADD(yy, DATEDIFF(yy,0,getdate()), 0), -1) 

たり、変数を使用する:

select DATEADD(yy, DATEADD(yy, DATEDIFF(yy,0,@YourDateTimeValue), 0), -1) 
+5

これは誰もが学ぶべきSQL Server内のかなり標準的なものがあるが、ここでは、年、月、日、時、分... HTTPのためにそれを行う方法を示したリンクです。 //stackoverflow.com/questions/85373/floor-a-date-in-sql-server –

+0

この回答は誤った結果をもたらします。 – JamesM

0
SELECT DATEADD(year, DATEDIFF(year, 365, GETDATE()), 0) 
+1

SELECT DATEADD(年、DATEDIFF(年、365、GETDATE())、0)うるう年では動作しません:( –

関連する問題