Para guardar fechas y horas dispone de varios tipos:
1) date: representa una fecha con formato "YYYY-MM-DD". El rango va de
"1000-01-01" a "9999-12-31".
2) datetime: almacena fecha y hora, su formato es "YYYY-MM-DD HH:MM:SS".
El rango es de "1000-01-01 00:00:00" a "9999-12-31 23:59:59".
3) time: una hora. Su formato es "HH:MM:SS". El rango va de "-838:59:59" a "838:59:59".
4) year(2) y year(4): un año. Su formato es "YYYY" o "YY". Permite valores desde 1901 a 2155
(en formato de 4 dígitos) y desde 1970 a 2069 (en formato de 2 dígitos).
Si ingresamos los valores como cadenas, un valor entre "00" y "69" es convertido a valores "year" en el rango de 2000 a 2069; si el valor está entre "70" y "99", se convierten a valores "year" en el rango 1970 a 1999.
Si ingresamos un valor numérico 0, se convierte en "0000"; entre 1 y 69, se convierte a valores "year" entre 2001 a 2069; entre 70 y 99, es convertido a valores "year" de 1970 a 1999.
Para almacenar valores de tipo fecha se permiten como separadores "/", "-" y ".".
Si ingresamos '06-12-31' (año de 2 dígitos), lo toma como '2006-12-31'.
Si ingresamos '2006-2-1' (mes y día de 1 dígito), lo toma como '2006-02-01'.
Si ingresamos '20061231' (cadena sin separador), lo toma como '2006-12-31'.
Si ingresamos 20061231 (numérico), lo toma como '2006-12-31'.
Si ingresamos '20061231153021' (cadena sin separadores), lo toma como '2006-12-31 15:30:21'.
Si ingresamos '200612311530' (cadena sin separadores con un dato faltante) no lo reconoce como fechahora y almacena ceros.
Si ingresamos '2006123' (cadena sin separadores con un dato faltante) no lo reconoce como fecha y almacena ceros.
Si ingresamos '2006-12-31 11:30:21' (valor date time) en un campo 'date', toma sólo la parte de la
fecha, la hora se corta, se guarda '2006-12-31'.
Es importante elegir el tipo de dato adecuado según el caso, el más preciso. Por ejemplo, si sólo
necesitamos registrar un año (sin día ni mes), el tipo adecuado es "year" y no "date".
Tipo Bytes de almacenamiento _______________________________________ date 3 datetime 8 time 3 year 1
Problema Resuelto:
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.
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".
Problema Propuesto:
Una concesionaria de autos vende autos usados. Guarda los siguientes
datos en la tabla "autos":
- marca (fiat 128, renault 11, peugeot 505, etc.) - modelo (año) - dueño (nombre del dueño) - precio (valor con decimales positivo que puede llegar hasta
999999.99 aprox.). 1- Elimine la tabla si existe. 2- Cree la tabla eligiendo el tipo de dato adecuado para almacenar estos datos:
create table autos( marca varchar(15), modelo year, dueño varchar(30), precio decimal (8,2) unsigned ); 3- Ingrese los siguientes registros: Fiat 128,1970,Juan Lopez,50000 Renault 11,1990,Juan Lopez,80000 Fiat 128,1971,Ana Ferreyra,51000 Peugeot 505,1998,Luis Luque,99000 Peugeot 505,1997,Carola Perez,85000 4- Seleccione todos los autos cuyo modelo sea menor a "1995": 5- Muestre la marca y modelo de los autos que no sean de "1970": 6- Ingrese un auto con el valor para "modelo" de tipo numérico: Peugeot 505,1995,Carlos Lopez,88000
Otros problemas:
Una empresa almacena los datos de sus empleados en una tabla "empleados". 1- Elimine la tabla, si existe: 2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:
create table empleados( nombre varchar(20), documento char(8), sexo char(1), domicilio varchar(30), fechaingreso date ); 3- Ingrese algunos registros: Juan Perez,22333444,m,Colon 123,1990-10-08 Ana Acosta,23333444,f,Caseros 987,1995-12-18 Lucas Duarte,25333444,m,Sucre 235,2005-05-15 Pamela Gonzalez,26333444,f,Sarmiento 873,1999-02-12 Marcos Juarez,30333444,m,Rivadavia 801,2002-09-22 4- Seleccione todos los datos de los empleados que ingresaron a la
empresa antes del 2000: 5- Muestre el nombre y la fecha de ingreso de los empleados de sexo masculino: 6- Modifique la fecha de ingreso del empleado con documento "22333444" a
"1990-10-18": 7- Ingrese un empleado con valor para "fechaingreso" en la cual coloque 2
digitos correspondientes al año: Susana Duarte,30123456,f,Sucre 1234,99-02-12 8- Ingrese un empleado colocando sólo un dígito en la parte de la fecha
correspondiente al mes y día: Daniel Herrero,30000001,m,null,1980-2-03 9- Ingrese una fecha de ingreso sin separadores: Ana Juarez,31123123,f,null,19900306 10- Ingrese un valor de tipo fecha y hora: Juan Mores,32222333,m,null,1990-03-06 10:15
Sólo guarda la parte de la fecha. 11- Ingrese un valor que MySQL no reconozca como fecha: Hector Perez,34444555,m,null,1990036
Almacenará ceros.
No hay comentarios:
Publicar un comentario