Logo
You
Code

SEC_TO_TIME 838:59:59 MySql

Autor YouCode - http://www.youcode.com.ar/mysql/sectotime-8385959-mysql-370

Limitacion al momento de sumar horas como integers (segundos) y pasarlos a horas, veremos la solucion.

En MySql muchas veces guardamos algunos valores TIME com integer usando TIME_TO_SEC , esto suele ser buen metodo cuando queremos sumar , simplemente lo vemos como sumar dos integer, pero que pasa al pasarlos a horas?

Sabemos que ese numero integer es la representacion de una hora en segundos y asumimos que SEC_TO_TIME nos devolvera la hora, esta bien, es asi pero.....si la hora supera el valor 838:59:59 siempre obtendremos este valor.

Parece ser un limite que tiene MySql , bueno, veremos una funcion para MySql la cual nos devolvera la hora correcta.

Quede claro que esta funcion debe ser utilizada si sabemos que la suma de estos campos integer los cuales tienen los valores en segundos, son demaciado grandes.
 
CREATE FUNCTION SEC_TO_TIME2 (in_seconds int)
RETURNS VARCHAR(16)
BEGIN
  DECLARE v_hour INT;
  DECLARE v_minute INT;
  DECLARE s_hour VARCHAR(10);
  DECLARE s_minute VARCHAR(2);
  DECLARE s_second VARCHAR(2);

  SET v_hour = FLOOR(in_seconds / 60 / 60);
  SET in_seconds = in_seconds - (v_hour * 60 * 60);

  SET v_minute = FLOOR(in_seconds / 60);
  SET in_seconds = in_seconds - (v_minute*60);

  SET s_hour = IF (v_hour < 10,LPAD(v_hour,2,'0'),v_hour);
  SET s_minute = IF (v_minute < 10,LPAD(v_minute,2,'0'),v_minute);
  SET s_second = IF (in_seconds < 10,LPAD(in_seconds,2,'0'),in_seconds);

  RETURN CONCAT(s_hour,':',s_minute,':',s_second);

  END
con esta funcion ya no importa cuanto de la suma de los integers, esta funcion nos devuelve la hora que debe ser.
http://www.youcode.com.ar/mysql/sectotime-8385959-mysql-370