Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

T-SQL:Arredondar para o intervalo de 15 minutos mais próximo


Atualmente, estou usando uma variante dateadd/datediff com uma data zero (0) para isso. Não é necessário Casting:
select dateadd(minute, datediff(minute,0,GETDATE()) / 15 * 15, 0)

GETDATE() é qualquer que seja o seu datetime.

Isso funcionará para datas pelo menos até o ano 5500 antes que o dateff falhe devido a um estouro. No entanto, se você tentar usar a segunda precisão, acima falhará imediatamente.

Usar outra data fixa, como '2009-01-01', ou a data de hoje (aviso, SQL mais feio) corrigirá isso. Uma data futura também funcionará. Contanto que tenha uma parte de tempo de 00:00:00, você pode basear outro datetime nele.

por exemplo:arredondar para os 30 segundos mais próximos:
select dateadd(second, round(datediff(second, '2010-01-01', GETDATE()) / 30.0, 0) * 30, '2010-01-01');