Ich verwende derzeit eine dateadd / datediff-Variante mit einem Datum von Null (0) dafür. Kein Casting erforderlich:
select dateadd(minute, datediff(minute,0,GETDATE()) / 15 * 15, 0)
GETDATE() ist, was auch immer Ihre Datetime ist.
Dies funktioniert für Daten mindestens bis zum Jahr 5500, bevor der datediff wegen eines Überlaufs fehlschlägt. Wenn Sie jedoch versuchen, die zweite Genauigkeit zu verwenden, wird oben sofort fehlschlagen.
Wenn Sie ein anderes festes Datum verwenden, z. B. '2009-01-01', oder das heutige Datum (Warnung, hässlicheres SQL), wird dies behoben. Ein zukünftiges Datum wird auch funktionieren. Solange es einen Zeitteil von 00:00:00 hat, können Sie eine andere Datumszeit darauf basieren.
zum Beispiel:auf die nächsten 30 Sekunden runden:
select dateadd(second, round(datediff(second, '2010-01-01', GETDATE()) / 30.0, 0) * 30, '2010-01-01');