Professional Documents
Culture Documents
GUIA DE APRENDIZAJE # 4
TEMA: MySql
RUTA PRÁCTICA:__________________________________
Estudiante :____________________________ Grado:11__ Fecha __/__/_____ Nota ___
JUSTIFICACIÓN: Se pretende que el estudiante conozca algunos aspectos relacionados con el manejo de
Algunos tipos de datos DATE de MySql
OBJETIVOS : Identificar la funcionalidad de algunas funciones sobre algunos tipos de datos
CONTENIDO
Fechas en MySQL
Trabajar con fechas desde SQL MySQL es realmente potente con el cálculo y el tratamiento de las fechas. Para
sacar el máximo rendimiento disponemos de las siguientes instrucciones.
CURRENT_DATE()
Esta función da la fecha del día Ejemplo:
SELECT CURRENT_DATE();
Obtenemos 2005-01-01, en el formato de fecha ‘Año-Mes-Día’ propio de MySQL.
Esta fecha sale en el formato año-mes-día que puede resultar un poco difícil de leer.
Ejemplo1 para averiguar las mascotas mayores 1 año
SELECT nombre , YEAR(CURDATE()) -YEAR(nacimiento) AS EDAD from MASCOTAS
WHERE (year( CURDATE()) -year(nacimiento)) >= 1
DATE_FORMAT podemos dar formato a la salida del texto.
SELECT DATE_FORMAT(CURDATE(),'%d/%m/%y');
con lo que se obtiene el formato día/mes/año usual.
DAYNAME()
Dada una fecha, esta función da el nombre en inglés del día de la semana correspondiente.
Ejemplo: SELECT DAYNAME(CURDATE());
Obtenemos por ejemplo, Sunday.
DAYOFWEEK()
Es complementaria de la anterior. En vez de darnos el nombre del día de la semana nos da un código
numérico de 1 a 7. El código 1 representa el Domingo, el 2 el Lunes, y así hasta el 7 que representa el Sábado.
Ejemplo: SELECT DAYOFWEEK(CURDATE());
Obtenemos por ejemplo un 2,que indica el lunes.
DATE_FORMAT()
Nos permite presentar las fechas en otros formatos. Los formatos que usaremos son '%d/%m/%y' y
'%d/%m/%Y'.
Ejemplo: SELECT DATE_FORMAT(CURDATE(),’%d/%m/%Y');
Produce 23/04/2005.
DATE_ADD()
Esta función nos permite agregar a una fecha cierto número de días ( o meses y años)
Ejemplo: ¿Cuál es la fecha de dentro de 15 días?
SELECT DATE_ADD(CURDATE(), INTERVAL 15 DAY);
también podriamos hacer
SELECT DATE_FORMAT(DATE_ADD(CURRENTDATE(),INTERVAL 15 DAY) ,’%d/%m/%Y');
DATE_SUB()
Esta función le quita cierto número de días (o meses y años) a una fecha.
Ejemplo: ¿Cuál es la fecha de hace 15 días?
SELECT DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 15 DAY),’%d/%m/%Y');
DATEDIFF()
Esta función obtiene la diferencia, en días, entre dos fechas.
Ejemplo : SELECT DATEDIFF(‘2005-4-23’,’2004-5-15’); funciona con Mysql 4.1 en adelante
Cuando compara una colmna DATE, TIME, DATETIME, o TIMESTAMP a una cadena de carácteres
constante con los operadores <, <=, =, >=, >, o BETWEEN, MySQL normalmente convierte la cadena de
caráteres a un entero largo interno para una comparación más rápda (y también para hacer una comparación
algo más permisiva). Aún así, esta conversión está sujeta a las siguientes restricciones:
Para estos casos excepcionales, la comparación se hace convirtiendo los objetos a cadenas de carácteres y
realizando una comparación de cadenas de carácteres.
Para mantener todo a salvo, asuma que las fechas son comparadas como cadenas de carácteresy utilice las
funciones de cadena de carácteres apropiadas para comparar un valor temporal con una cadena de carácteres.
La fecha especial '0000-00-00' puede almacenarse y recogerse como '0000-00-00'. Cuando se utiliza una fecha
'0000-00-00' a través de MyODBC, es convierte automáticamente en NULL en MyODBC 2.50.12 y superiores,
porque ODBC no puede gestionar este tipo de fechas.
Como MySQL realiza las conversiones anteriores, las siguientes sentencias funcionan:
INSERT INTO nombre_de_tabla (idate) VALUES (19970505);
INSERT INTO nombre_de_tabla (idate) VALUES ('19970505');
INSERT INTO nombre_de_tabla (idate) VALUES ('97-05-05');
INSERT INTO nombre_de_tabla (idate) VALUES ('1997.05.05');
INSERT INTO nombre_de_tabla (idate) VALUES ('1997 05 05');
INSERT INTO nombre_de_tabla (idate) VALUES ('0000-00-00');
SELECT idate FROM nombre_de_tabla WHERE idate >= '1997-05-05';
Pero lo siguente no funciona:
SELECT idate FROM nombre_de_tabla WHERE STRCMP(idate,'20030505')=0;
STRCMP() es una función de comparación de cadenas, así que convierte idate a una cadena de caracteres en
formato 'YYYY-MM-DD' y realiza una comparación de cadenas. Es decir, NO convierte '20030505' en la fecha
'2003-05-05' para realizar una comparación de fechas.
Esto hace que MySQL sea muy convenienta para las aplicaciones web en que usted obtiene el año, mes y día
en tres campos diferentes y quiere almacenar exactamente lo que el usuario insertó (sin validación de fechas).
Si no está utilizando el modo SQL NO_ZERO_IN_DATE, la parte del día o el mes pueden ser cero. Esto es
conveniente si quiere almacenar una fecha de nacimiento en una columna DATE y solo conoce parte de esa
fecha.
Si no está utlizando el modo SQL NO_ZERO_DATE, MySQL también le permite almacenar '0000-00-00'
como fecha comodín. En algunos momentos esto puede ser más adecuado que utilizar valores NULL.
Si la fecha no puede ser convertida a ningún valor razonable, se almacena un 0 en la columna DATE, que se
extrae como '0000-00-00'. Esto es una cuestión de velocidad y conveniencia. Creemos que la responsabilidad
del servidor de bases de datos es recoger la misma fecha que usted almacenó (aún cuando la fecha no fuese
lógicamente correcta en todos los casos). Creemos que es responsabilidad de la aplicación y no del servidor
comprobar las fechas.
Actividades:
Teniendo en cuenta el taller # 2 y dando solución tenemos el siguiente Modelo entidad Relación
Cliente
Eventos
Ejercicio 1: Si queremos hallar numero de factura, el articulo, valor unitario , número de dias para la factura
# 00001
Resultado
Bibliografía
http://dev.mysql.com/doc/refman/5.0/es/using-date.html