declare @dt datetime
set @dt = '09-22-2007 15:07:38.850'
select dateadd(mi, datediff(mi, 0, @dt), 0)
select dateadd(hour, datediff(hour, 0, @dt), 0)
dönecek
2007-09-22 15:07:00.000
2007-09-22 15:00:00.000
Yukarıdakiler, soruda istenen sonuçları üreterek saniyeleri ve dakikaları kısaltır. @OMG Ponies'in de belirttiği gibi, yukarı / aşağı yuvarlamak istiyorsanız, sırasıyla yarım dakika veya yarım saat ekleyebilir ve sonra kesebilirsiniz:
select dateadd(mi, datediff(mi, 0, dateadd(s, 30, @dt)), 0)
select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)
ve alacaksın:
2007-09-22 15:08:00.000
2007-09-22 15:00:00.000
SQL Server 2008'de tarih veri türü eklenmeden önce, yalnızca tarihi almak için bir tarih saatinden saat bölümünü kesmek için yukarıdaki yöntemi kullanırdım. Buradaki fikir, söz konusu tarih saat ile sabit bir zaman noktası arasındaki gün sayısını belirlemektir ( 0
örtük olarak aşağıdakilere dönüşür 1900-01-01 00:00:00.000
):
declare @days int
set @days = datediff(day, 0, @dt)
ve sonra bu gün sayısını sabit zaman noktasına ekleyin, bu size saatin ayarlandığı orijinal tarihi verir 00:00:00.000
:
select dateadd(day, @days, 0)
veya daha kısaca:
select dateadd(day, datediff(day, 0, @dt), 0)
Farklı DATEPART kullanarak (örneğin hour
, mi
) buna göre çalışacaktır.