Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

T-SQL :arrondir à l'intervalle de 15 minutes le plus proche

J'utilise actuellement une variante dateadd / datediff avec une date zéro (0) pour cela. Aucun casting requis :

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

GETDATE() est quelle que soit votre date/heure.

Cela fonctionnera pour les dates au moins jusqu'à l'an 5500 avant l'échec de datediff en raison d'un débordement. Cependant, si vous essayez d'utiliser la seconde précision, ci-dessus échouera immédiatement.

L'utilisation d'une autre date fixe, comme '2009-01-01', ou la date d'aujourd'hui (avertissement, SQL plus moche) résoudra ce problème. Une date future fonctionnera également. Tant qu'il a une partie horaire de 00:00:00, vous pouvez baser une autre date/heure dessus.

par exemple :arrondir aux 30 secondes les plus proches :

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