In SQL Server 2008 möchte ich, dass die Datum / Uhrzeit-Spalte auf die nächste Stunde und die nächste Minute gerundet wird, vorzugsweise mit vorhandenen Funktionen im Jahr 2008.
Für diesen Spaltenwert 2007-09-22 15:07:38.850
sieht die Ausgabe folgendermaßen aus:
2007-09-22 15:08 -- nearest minute
2007-09-22 15 -- nearest hour
sql
sql-server
tsql
sql-server-2008
user219628
quelle
quelle
Antworten:
wird zurückkehren
Das Obige schneidet nur die Sekunden und Minuten ab und erzeugt die in der Frage angeforderten Ergebnisse. Wie @OMG Ponies hervorhob, können Sie, wenn Sie auf- und abrunden möchten, eine halbe Minute bzw. eine halbe Stunde hinzufügen und dann abschneiden:
und du wirst bekommen:
Vor dem Datum Datentyp in SQL Server 2008 hinzugefügt wurde, würde ich das obige Verfahren verwenden , um den Zeitabschnitt aus einem Datumzeit zu verkürzen nur das Datum zu erhalten. Die Idee ist, die Anzahl der Tage zwischen der fraglichen Datumszeit und einem festen Zeitpunkt (
0
der implizit gilt) zu bestimmen1900-01-01 00:00:00.000
:und fügen Sie dann diese Anzahl von Tagen zum festen Zeitpunkt hinzu, wodurch Sie das ursprüngliche Datum mit der Uhrzeit erhalten, die auf Folgendes eingestellt ist
00:00:00.000
:oder prägnanter:
Die Verwendung eines anderen Datumsteil (zB
hour
,mi
) wird entsprechend arbeiten.quelle
datetimeoffset
, musste ich ersetzen0
mitTODATETIMEOFFSET('1900-01-01 00:00:00', 0)
zu vermeiden zwingt die lokale Zeitzone auf das Ergebnis."Abgerundet" wie in Ihrem Beispiel. Dies gibt einen varchar-Wert des Datums zurück.
quelle
CONVERT(datetime, CONVERT(VARCHAR(13), @date, 120)+':00:00')
Mir ist klar, dass diese Frage uralt ist und es eine akzeptierte und eine alternative Antwort gibt. Mir ist auch klar, dass meine Antwort nur die Hälfte der Frage beantwortet, aber für alle, die auf die nächste Minute runden möchten und dennoch einen datetime-kompatiblen Wert mit nur einer Funktion haben möchten :
Verwenden Sie für Stunden oder Sekunden die Antwort von Jeff Ogata (die akzeptierte Antwort) oben.
quelle
smalldatetime
Select convert(char(8), DATEADD(MINUTE, DATEDIFF(MINUTE, 0, getdate), 0), 108) as Time
rundet Sekunden auf 00 ab
quelle