sql >> Database >  >> RDS >> Sqlserver

T-SQL:Rond af op het dichtstbijzijnde interval van 15 minuten

Hiervoor gebruik ik momenteel een dateadd / datediff variant met een nul (0) datum. Casten is niet nodig:

select dateadd(minute, datediff(minute,0,GETDATE()) / 15 * 15, 0)

GETDATE() is wat je datetime is.

Dit werkt voor datums tot ten minste het jaar 5500 voordat de datediff mislukt vanwege een overloop. Als u echter de tweede nauwkeurigheid probeert te gebruiken, zal bovenstaande meteen mislukken.

Het gebruik van een andere vaste datum, zoals '2009-01-01', of de datum van vandaag (waarschuwing, lelijkere SQL) zal dat oplossen. Een toekomstige datum zal ook werken. Zolang het een tijdsdeel van 00:00:00 heeft, kun je er een andere datetime op baseren.

bijvoorbeeld:rond af op de dichtstbijzijnde 30 seconden:

select dateadd(second, round(datediff(second, '2010-01-01', GETDATE()) / 30.0, 0) * 30, '2010-01-01');


  1. Pas op waar u op let

  2. execSQL() met UPDATE wordt niet bijgewerkt

  3. het geven van de juiste gebruikersnaam en wachtwoord, verkrijg ORA-01017:ongeldige gebruikersnaam/wachtwoord; Aanmelding geweigerd

  4. Een use-case voor sp_prepare / sp_prepexec