19 - Tipos de datos (fechas y horas)


Problema:

Una playa de estacionamiento guarda cada día los datos de los vehículos que ingresan a la playa en una tabla llamada "vehiculos".

Eliminamos la tabla "vehiculos" si existe:

 drop table if exists vehiculos;

Creamos la tabla con la siguiente estructura:

 create table vehiculos(
  patente char(6) not null,
  tipo char (4),
  horallegada time not null,
  horasalida time
 );

Hemos definido el campo "patente" de tipo "char" y no "varchar" porque la cadena de caracteres siempre tendrá la misma longitud (6 caracteres), con esta definición ocupamos 6 bytes, si lo hubiésemos definido como "varchar(6)" ocuparía 7 bytes. Lo mismo sucede con el campo "tipo", en el cual almacenaremos "auto" o "moto", necesitamos 4 caracteres fijos. Para los campos que registran la hora de llegada y de salida de cada vehículo usamos "time" porque solamente almacenaremos horas, no fechas.

Ingresamos algunos registros:

 insert into vehiculos (patente,tipo,horallegada) values ('ACD123','auto','8:30');
 insert into vehiculos (patente,tipo,horallegada) values('BGF234','moto','8:35');
 insert into vehiculos (patente,tipo,horallegada) values('KIU467','auto','9:40');

Vemos los registros cargados:

 select * from vehiculos;

Note que no ingresamos los segundos y colocó por defecto "00" para ellos.

Actualizamos la hora de salida del vehículo con patente "ACD123":

 update vehiculos set horasalida='11:45'
  where patente='ACD123';

Ingresemos un registro con la hora, sin los minutos:

 insert into vehiculos values('LIO987','auto','10',null);

veamos lo que sucedió:

 select * from vehiculos;

almacenó el valor ingresado como si fueran segundos.

Ingresamos un valor de horas y minutos sin separador:

 insert into vehiculos values('GTR987','auto','1010',null);

incluye el separador, almacena "10:10".

Si ingresamos un valor "datetime" (fecha y hora), almacena solamente la hora:

 insert into vehiculos values('HTR234','auto','2006-12-15 12:15',null);

Si ingresamos un separador diferente al permitido, por ejemplo "/", guarda solamente el último valor y lo coloca como segundos:

 insert into vehiculos values('KUY246','auto','12/15',null);

almacena "00:00:15".




Retornar