Objetivo: presentar en MySQL el tipo de datos TIME, adecuado tanto para registrar horas como para el tiempo transcurrido entre dos eventos.
En el artículo anterior tratamos el tipo de datos DATE para registrar fechas (año, mes y día). Aunque, como veremos pronto, existen también tipos para indicar fecha y hora en el mismo campo, MySQL dispone de uno específico para almacenar horas: TIME.
Hay varias maneras de introducir la hora y es preciso conocer algunas sutilezas.
Comencemos por el formato básico:
‘HH:MM:SS’
Indicamos la hora, seguida de los minutos y de los segundos. Por ejemplo:
'07:30:46'
'13:46:00'
'23:59:59'
No olvides las comillas y ten en cuenta que la hora se indica en formato 24 horas (no 12, con am y pm).
Una hora escrita con sus tres pares (horas, minutos y segundos), puede indicarse también sin el delimitador de los dos puntos. De este modo, los tres ejemplos anteriores puedes escribirlos así:
'073046'
'134600'
'235959'
o incluso como números, sin las comillas:
073046
134600
235959
Si empleamos el delimitador, podemos prescindir de los ceros a la izquierda. Las siguientes horas son equivalentes:
'05:05:05'
'5:5:5'
Pero ten presente que, sin delimitadores, esa hora no podría escribirse como '555'
, sino ‘050505'
.
También podemos expresar horas en formato más corto:
‘HH:MM’
'13:30'
es equivalente a '13:30:00'
.
Puedes usar el formato corto sin delimitadores, pero con una precaución importante que puede prestarse a confusión.
Siempre que facilitas una hora sin delimitadores (con comillas o sin ellas) MySQL intenta formar los pares de derecha a izquierda. Por ejemplo:
‘1330’ es equivalente a '00:13:30'
y NO '13:30:00'
, como sucedía antes.
'759'
es equivalente a '00:07:59'
'10'
es equivalente a '00:00:10'
.
Tenlo siempre presente a la hora de emplear delimitadores o no.
El tipo TIME puede utilizarse no sólo para registrar horas, sino también para indicar el espacio de tiempo entre dos sucesos, siempre y cuando entre ellos no existan más de 35 días.
35 días (aproximadamente), he dicho bien.
Pero, ¿cómo representamos hasta 35 días en un formato HH:MM:SS?
‘HHH:MM:SS’
Es decir, empleando tres cifras para la hora:
'100:45:15'
que se corresponde a 100 horas, cuarenta y cinco minutos y quince segundos.
También puedes expresar medidas temporales negativas:
'-100:45:15'
El rango temporal permitido está comprendido entre -838:59:59
y 838:59:59
.
839 horas son aproximadamente 35 días.
Este otro formato también es válido:
‘D HHH:MM:SS’
donde D representa el número de días:
'5 15:20:40'
significa 5 días, 15 horas, 20 minutos y 40 segundos.
O este otro:
'20 100:34:45'
Pero aunque lo introduzcamos así, MySQL nos lo presentará con los días pasados a horas:
'580:34:45'
.
Este otro valor resultaría en error:
'20 500:00:00'
ya que, si conviertes los días a horas te queda que es equivalente a
'980:00:00'
y ya sabes que el límite es
838:59:59
Empleando días también está disponible esta otra sintaxis:
‘D HHH’
Por ejemplo,
'20 5'
que equivale a 20 días y 5 horas, es decir, lo mismo que:
'485:00:00'
Para finalizar, como aplicación práctica, vamos a diseñar una tabla MySQL, denominada fichajes, en la que registraremos los fichajes de entrada y salida en una empresa.
mysql> CREATE TABLE fichajes
-> (
-> fecha DATE,
-> entrada TIME,
-> salida TIME
-> );
Query OK, 0 rows affected (0.11 sec)
mysql> DESC fichajes;
+---------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+------+------+-----+---------+-------+
| fecha | date | YES | | NULL | |
| entrada | time | YES | | NULL | |
| salida | time | YES | | NULL | |
+---------+------+------+-----+---------+-------+
3 rows in set (0.05 sec)
Nada más; son las 18:34:46, hora ya de publicar este artículo…
Javier Montero Gabarró
http://elclubdelautodidacta.es/wp/2012/06/mysql-ha-llegado-la-hora/
El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)
El Club del Autodidacta
¡Accede al índice con todos los artículos sobre MySQL!
Interesante, lo probare. Gracias.
cuando uso el MySQL WorkBench me pide un tipo de dato cuando defino la tabla, time() que tengo que poner entremedio?, porque no puedo dejarlo sin nada.
No confundas el tipo de datos TIME con la función TIME().
Saludos
Buenas tardes, para subir la fecha y la hora de manera automatica yo hago esto fecha_hora TIMESTAMP default now()
¿para que solo me muestre la fecha y la hora en campos separados, que puedo hacer?
esto se resuelve en la consulta,gracias de todas maneras.