sql >> Base de Datos >  >> RDS >> Sqlserver

T-SQL:Redondear al intervalo de 15 minutos más cercano

Actualmente estoy usando una variante dateadd/dateiff con una fecha cero (0) para esto. No se requiere lanzamiento:

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

GETDATE() es cualquiera que sea su fecha y hora.

Esto funcionará para fechas al menos hasta el año 5500 antes de que el archivo dateiff falle debido a un desbordamiento. Sin embargo, si intenta usar la segunda precisión, la anterior fallará de inmediato.

El uso de otra fecha fija, como '2009-01-01', o la fecha de hoy (advertencia, SQL más feo) solucionará eso. Una fecha futura también funcionará. Siempre que tenga una parte de tiempo de 00:00:00, puede basar otra fecha y hora en él.

por ejemplo:redondear a los 30 segundos más cercanos:

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