Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

T-SQL:arrotonda all'intervallo di 15 minuti più vicino

Attualmente sto usando una variante dateadd / datediff con una data zero (0) per questo. Nessun casting richiesto:

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

GETDATE() è qualunque sia la tua data e ora.

Questo funzionerà per date almeno fino all'anno 5500 prima che il datediff fallisca a causa di un overflow. Tuttavia, se si tenta di utilizzare la seconda precisione, quella precedente fallirà immediatamente.

L'uso di un'altra data fissa, come "01-01-2009" o la data odierna (avviso, SQL più brutto) risolverà il problema. Funzionerà anche una data futura. Finché ha una parte temporale di 00:00:00 puoi basare un'altra data e ora su di essa.

ad esempio:arrotonda ai 30 secondi più vicini:

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