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)
wird zurückkehren
2007-09-22 15:07:00.000
2007-09-22 15:00:00.000
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:
select dateadd(mi, datediff(mi, 0, dateadd(s, 30, @dt)), 0)
select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)
und du wirst bekommen:
2007-09-22 15:08:00.000
2007-09-22 15:00:00.000
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 bestimmen 1900-01-01 00:00:00.000
:
declare @days int
set @days = datediff(day, 0, @dt)
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
:
select dateadd(day, @days, 0)
oder prägnanter:
select dateadd(day, datediff(day, 0, @dt), 0)
Die Verwendung eines anderen Datumsteil (zB hour
, mi
) wird entsprechend arbeiten.