2009-10-06 10 views
5

SQL Server 2005'te, 1 yıl öncesinden + bu yılın geçerli olduğu zamandaki tüm satırları silmeniz gereken bir temizleme işlemi üzerinde çalışıyorum.Yılın ilk saniyesinin tarihini SQL ile nasıl alabilirim?

Ör: I (yani dahildir ve geriye 2007) bugün 2008-01-01 00:00 daha satırlar eski silmek zorunda 2009/06/10 prosedürü yürütmek durumunda.

Yılın ilk saniyesinin tarihini nasıl alabilirim?

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

ama (ben yanlış beklendiği gibi) ben 1905-07-02 00:00:00.000 değil 2008-01-01 00:00 olsun:

Bu denedim.

Birisi bana yardım edebilir mi?

cevap

4

Bu çalışacaktır:

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

(Muhtemelen "en iyi" çözüm ve olmadığını biliyorum gerekli olandan daha fazla oyuncuyu içeriyor ama işe yarıyor ve bunun nasıl kullanılacağı için bir prag gibi görünüyor. ! Matik çözüm)

+0

Hmm .. Bu soruya verilen diğer cevapların (yazının yazıldığı tarihte) 8 tane oyu vardır, oysa benimki sadece 1 yukarı ve 1 aşağı oyundur, ancak benimki doğru cevabı veren tek çözümdür. (yani. Bugünün tarihi (6 Ekim 2009) için sonuç 2008-01-01 00:00:00, Raj'ın çözümü ise 2009-01-01 00:00:00) – CraigTP

+1

SELECT CONVERT (DATETIME, CAST) YEAR (GETDATE()) - 1 AS VARCHAR) + '0101', 112) veya SELECT CONVERT (DATETIME, CAST (YEAR (GETDATE()) - 1 AS VARCHAR), 112) daha fazla, çünkü giriş formatını belirler. – LukLed

+0

@CraigTP: Doğru cevabı aldığınız için kendimi size bıraktım. Düzeltmeyi –

11

DÜZENLEME: Bu, önceki yıl için soru olduğunda, geçerli yıl döndürüyordu. Kod bunu yansıtacak şekilde düzeltildi.

kullanımı bu

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

VEYA Değişkeninizi kullanmak:

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

bu herkesin öğrenmesi gereken bir SQL Server oldukça standart bir şeydir, burada yıl, ay, gün, saat, dakika ... http bunu nasıl gösteren bir link: //stackoverflow.com/questions/85373/floor-a-date-in-sql-server –

+0

Bu cevap WRONG sonucunu üretir. – JamesM

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

SELECT DATEADD (yıl, DATEDIFF (yıl, 365, GETDATE()), 0) Artık yıl ile çalışmaz :( –

İlgili konular