Hola, chicos,
¡Buenas noches!
En la publicación de hoy demostraré cómo convertir el tiempo almacenado como un número entero en una columna de tiempo. Tuve la idea de escribir este post cuando un compañero DBA me dijo que está manejando un sistema que usa la base de datos MySQL y tiene una tabla donde el programador decide almacenar la hora en un campo entero, de modo que las 09:30 se almacenan como 930 y las 21:20 se almacenan como 2120, por ejemplo.
Desafortunadamente, esto no fue nada nuevo para mí y esto me motivó a escribir este post, ya que puede ayudar a otras personas, ya sea el DBA, a poder trabajar con estos datos o al Desarrollador, para que pueda usar el campo de fecha y hora o de hora para almacenar este tipo de información.
Simulando la base de prueba
Para que puedas simular este problema en casa, decidí poner a disposición este sencillo script:
-- Cria a tabela de teste
DROP TABLE IF EXISTS `teste`;
CREATE TABLE `teste` (
`descricao` VARCHAR(60) COLLATE utf8_unicode_ci NOT NULL,
`hora_int` INT(11) NOT NULL,
`hora` TIME DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- Insere os dados
INSERT INTO `teste`(descricao, hora_int) VALUES('Teste 09:30', 930), ('Teste 13:42', 1342), ('Teste 21:53', 2153);
-- Exibe os dados
SELECT * FROM `teste`;
Resultado:

Convertir el tiempo almacenado como una columna INT a TIME
Después de hacer esta introducción y publicar el script de prueba, ahora demostraré cómo realizar esta conversión de un número entero a un tiempo.
Usando CONVERTIR
Una forma rápida de hacer esto es usar la función CONVERTIR de MySQL para convertir el número a HORA. Si intentamos realizar la conversión directamente, MySQL transformará los datos, pero entenderá que los datos están representados en el formato mm:ss, como se muestra en la siguiente impresión:

Para que entienda que nuestro formato de hora es HH:mm:ss, multiplicaré el número por 100, de modo que el “minuto” se convierta en una hora, el “segundo” se convierta en un minuto y los segundos se pondrán a cero.

Si también almacena segundos en todo el campo, no necesita multiplicar por 100:

Convertir a segundos y luego usar la función SEC_TO_TIME()
Otra forma de hacer esto es:
- Separe manualmente el valor del campo de hora (LEFT(int_hour, CHAR_LENGTH(int_hour) – 2)
- Una vez obtenido el valor de la hora, se multiplica la hora obtenida por 3600 (60 x 60), para calcular el número de segundos que componen la hora.
- Separe manualmente el valor del campo de minutos (DERECHA (int_hora, 2))
- Una vez obtenido el valor del minuto, se multiplica el minuto obtenido por 60, para calcular el número de segundos que componen los minutos.
- Sume la cantidad de segundos en la hora a la cantidad de segundos en los minutos para calcular la cantidad total de segundos.
- Una vez convertido a segundos, podemos usar la función SEC_TO_TIME() de MySQL para obtener el tiempo correspondiente a partir del número de segundos calculado.
Y ahora podemos comprobar la solución resumida:
SELECT
descricao,
hora_int,
CONVERT(hora_int * 100, TIME) AS time1,
SEC_TO_TIME((LEFT(hora_int, CHAR_LENGTH(hora_int) - 2) * 3600) + (RIGHT(hora_int, 2) * 60)) AS time2
FROM
`teste`
Resultado final:

Utilicé la instrucción SELECT para mostrar el resultado final, pero puedes usarla fácilmente con UPDATE, convirtiendo de INT a TIME. En este caso recomiendo crear una nueva columna de tipo TIME, realizar el UPDATE, y si todo está bien eliminar la columna INT.
Espero que te haya gustado el post!
Si tienes alguna pregunta, déjala en los comentarios.

Comentários (0)
Carregando comentários…