valor truncar redondeo redondear potencia parte moneda hacia formato evitar entera decimales arriba absoluto mysql time rounding

truncar - redondear hacia arriba mysql



Cómo redondear un tiempo al segmento de 15 minutos más cercano (3)

¿Cómo puedo redondear los tiempos en MySQL a los 15 minutos más cercanos (por ejemplo, 0,15,30,45)?


Aquí hay un código en bruto que utilicé que hizo que los resultados estuvieran muy cerca de lo que quería. Como no usé los segundos, simplemente elegí los minutos cerca del punto medio.

SELECT CASE WHEN minute(timeIn) BETWEEN 0 and 7 THEN SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600) WHEN minute(timeIn) BETWEEN 8 and 22 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), ''00:15:00'') WHEN minute(timeIn) BETWEEN 23 and 37 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), ''00:30:00'') WHEN minute(timeIn) BETWEEN 38 and 52 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), ''00:45:00'') WHEN minute(timeIn) BETWEEN 53 and 59 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), ''01:00:00'') END as 15_min FROM clock.punches;


SELECT FROM_UNIXTIME( TRUNCATE(UNIX_TIMESTAMP(NOW()) / 900,0)*900);

Esto se puede generalizar para redondear a cualquier valor de tiempo. 900 segundos = 15 minutos. Puede reemplazar el 900 con cualquier otro factor de redondeo.


SELECT SEC_TO_TIME(FLOOR((TIME_TO_SEC(CURTIME())+450)/900)*900)

En este ejemplo, he usado CURTIME () para el tiempo de entrada, pero puede usar cualquier campo de tiempo.

900 segundos = 15 minutos (el período para redondear a), 450 segundos es la mitad de eso (para proporcionar el elemento de redondeo). He probado con 1800/900 para obtener la media hora más cercana, debería trabajar con otros (600/300 durante 10 minutos, etc.).