Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

T-SQL-Datum/Uhrzeit, gerundet auf die nächste Minute und die nächsten Stunden mit using-Funktionen

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 kürzt nur die Sekunden und Minuten und erzeugt die in der Frage geforderten Ergebnisse. Wie @OMG Ponies betonte, können Sie, wenn Sie auf-/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 Sie erhalten:

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

Bevor der Datumsdatentyp in SQL Server 2008 hinzugefügt wurde, würde ich die obige Methode verwenden, um den Zeitteil von einer Datumszeit abzuschneiden, um nur das Datum zu erhalten. Die Idee ist, die Anzahl der Tage zwischen dem betreffenden Datetime und einem festen Zeitpunkt (0 , was implizit zu 1900-01-01 00:00:00.000 umwandelt ):

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

und addieren Sie dann diese Anzahl von Tagen zu dem festgelegten Zeitpunkt, was Ihnen das ursprüngliche Datum mit der auf 00:00:00.000 eingestellten Uhrzeit ergibt :

select dateadd(day, @days, 0)

oder kürzer:

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

Verwenden Sie einen anderen Datumsteil (z. B. hour , mi ) wird entsprechend funktionieren.