W SQL Server 2008 chciałbym, aby kolumna z datą i godziną była zaokrąglona do najbliższej godziny i najbliższej minuty, najlepiej z istniejącymi funkcjami w 2008 roku.
Dla tej wartości kolumny 2007-09-22 15:07:38.850
wynik będzie wyglądał następująco:
2007-09-22 15:08 -- nearest minute
2007-09-22 15 -- nearest hour
sql
sql-server
tsql
sql-server-2008
user219628
źródło
źródło
Odpowiedzi:
wróci
Powyższe tylko skraca sekundy i minuty, dając wyniki, o które pytano. Jak zauważył @OMG Kucyki, jeśli chcesz zaokrąglić w górę / w dół, możesz dodać odpowiednio pół minuty lub pół godziny, a następnie skrócić:
a otrzymasz:
Zanim typ danych data został dodany w SQL Server 2008, użyłbym powyższej metody, aby skrócić część czasu z daty i godziny, aby uzyskać tylko datę. Chodzi o to, aby określić liczbę dni między daną datą i godziną a ustalonym punktem w czasie (
0
który niejawnie rzutuje na1900-01-01 00:00:00.000
):a następnie dodaj tę liczbę dni do ustalonego punktu w czasie, co daje pierwotną datę z czasem ustawionym na
00:00:00.000
:lub bardziej zwięźle:
Użycie innego datepart (np
hour
,mi
) będzie działać odpowiednio.źródło
datetimeoffset
musiałem zastąpić0
go,TODATETIMEOFFSET('1900-01-01 00:00:00', 0)
aby uniknąć narzucania lokalnej strefy czasowej na wynik.„Zaokrąglone” w dół, jak w przykładzie. Spowoduje to zwrócenie wartości varchar daty.
źródło
CONVERT(datetime, CONVERT(VARCHAR(13), @date, 120)+':00:00')
Zdaję sobie sprawę, że to pytanie jest starożytne i istnieje akceptowana i alternatywna odpowiedź. Zdaję sobie również sprawę, że moja odpowiedź odpowie tylko na połowę pytania, ale dla każdego, kto chce zaokrąglić do najbliższej minuty i nadal mieć wartość zgodną z datą i godziną, używając tylko jednej funkcji :
Przez godziny lub sekundy używaj powyższej odpowiedzi Jeffa Ogaty (zaakceptowanej odpowiedzi).
źródło
smalldatetime
został dodany w SQL 2008.Select convert(char(8), DATEADD(MINUTE, DATEDIFF(MINUTE, 0, getdate), 0), 108) as Time
zaokrągli w dół sekundy do 00
źródło