SORU
12 Temmuz 2011, Salı


T-SQL datetime yuvarlak kullanarak saat en yakın an en yakın ve fonksiyonları

SQL server 2008, 2008 yılında mevcut fonksiyonları ile datetime sütun en yakın saat ve en yakın dakikaya tercihen yuvarlak almak istiyorum.

Bu sütun için değeri 2007-09-22 15:07:38.850, çıkış gibi görünecektir:

2007-09-22 15:07 -- nearest minute
2007-09-22 15    -- nearest hour

CEVAP
12 Temmuz 2011, Salı


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önecektir

2007-09-22 15:07:00.000
2007-09-22 15:00:00.000

Yukarıda sadece birkaç saniye ve dakika, sonuçları söz istedi üreten keser. @OMG Midilli belirttiği gibi, Eğer/aşağı yuvarlama yapmak istiyorsanız, o zaman yarım dakika veya yarım saat sonra sırasıyla, sonra kesecek ekleyebilirsiniz:

select dateadd(mi, datediff(mi, 0, dateadd(s, 30, @dt)), 0)
select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)

ve alırsınız:

2007-09-22 15:08:00.000
2007-09-22 15:00:00.000

date veri türü SQL Server eklendi önce 2008, yukarıdaki yöntem sadece tarihi bir datetime zaman bölümünü kesmek için kullanın. Fikir söz konusu datetime ve zaman (örtülü olarak1900-01-01 00:00:00.000 yayınları 0): sabit bir nokta arasındaki gün sayısını belirlemek için

declare @days int
set @days = datediff(day, 0, @dt)

o zaman 00:00:00.000 set: özgün tarih verir ve bu süre içinde sabit bir nokta, gün bu numarayı ekleyin

select dateadd(day, @days, 0)

ya da daha kısaca:

select dateadd(day, datediff(day, 0, @dt), 0)

Farklı bir datepart (*, *21 *20 örneğin*) kullanarak buna göre çalışacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • RayperEnglishKnight

    RayperEnglis

    24 Kasım 2008
  • SerienTrailerMP

    SerienTraile

    7 HAZİRAN 2012
  • ThePointblank

    ThePointblan

    18 Aralık 2006