Skip navigation links

MySQL Forums :: Spanish :: Uso de distintos FORMATOS DE FECHA


Advanced Search

Re: Uso de distintos FORMATOS DE FECHA
Posted by: William Chiquito ()
Date: May 21, 2007 09:24PM

Hola Marco,

El tipo de dato DATE MySQL lo almacena con el siguiente formato: YYYY-MM-DD. Si defines una tabla con una columna DATE puedes hacer los INSERTs flexibles pero al momento de almacenarse MySQL lo hacen con el formato YYYY-MM-DD. Me explico con un ejemplo:
CREATE TABLE `mytabla` (
  `id` int(11) NOT NULL auto_increment,
  `fecha` date default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;

INSERT INTO mytabla (fecha) VALUES ('03-05-21'), ('04.05.21'), ('05/05/21'), ('06@05@21'), (NOW());

SELECT * FROM mytabla;
Resultado:
    id  fecha     
------  ----------
     1  2003-05-21
     2  2004-05-21
     3  2005-05-21
     4  2006-05-21
     5  2007-05-21
El formato de las cadenas al momento de hacer los INSERTs como puedes ver es flexible ('03-05-21', '04.05.21', etc.) pero al verificar la tabla podemos ver que el formato es igual para todas las tuplas (YYYY-MM-DD).

Si deseas almacenar fechas con otro formato veo como opción hacerlo en una columna de tipo CHAR o VARCHAR pero al momento de hacer comparaciones u operaciones con esas columnas deberás convertirlas a tipo DATE en caso contrario tendrás resultado errados. Me explico con un ejemplo:
CREATE TABLE `mytabla` (
  `id` int(11) NOT NULL auto_increment,
  `fecha` varchar(10) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;

INSERT INTO mytabla (fecha) VALUES ('21/05/03'), ('21/05/04'), ('21/05/05'), ('21/05/06'), ('21/05/07');

SELECT * FROM mytabla;
Resultado:
    id  fecha   
------  --------
     1  21/05/03
     2  21/05/04
     3  21/05/05
     4  21/05/06
     5  21/05/07
Hasta este momento quizás tienes lo que necesitas ("almacenar los datos de la misma manera que se despliegan en las aplicaciones") pero si necesitas hacer una operación, como por ejemplo, seleccionar todas las tuplas con fecha mayor al 20 de mayo de 2005, haces:
SELECT * FROM mytabla WHERE fecha > '20/05/05';
Obtendrás como resultado:
    id  fecha   
------  --------
     1  21/05/03
     2  21/05/04
     3  21/05/05
     4  21/05/06
     5  21/05/07
Ya que en realidad estás comparando cadenas, y el resultado no es lo que se necesita. En este caso tendrías que usar la función STR_TO_DATE para obtener el resultado que necesitamos.
SELECT * FROM mytabla WHERE STR_TO_DATE(fecha, '%d/%m/%y') > STR_TO_DATE('20/05/05', '%d/%m/%y');
Resultado:
    id  fecha   
------  --------
     3  21/05/05
     4  21/05/06
     5  21/05/07
Sin embargo, mi recomendación es almacenar las fechas con su tipo de datos DATE para facilitar todas las operaciones con estas columnas y usar la función DATE_FORMAT para representar la fecha con el formato que necesitemos. Ejemplo:
CREATE TABLE `mytabla` (
  `id` int(11) NOT NULL auto_increment,
  `fecha` date default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;

INSERT INTO mytabla (fecha) VALUES ('03-05-21'), ('04.05.21'), ('05/05/21'), ('06@05@21'), (NOW());

SELECT * FROM mytabla;
Resultado:
    id  fecha     
------  ----------
     1  2003-05-21
     2  2004-05-21
     3  2005-05-21
     4  2006-05-21
     5  2007-05-21
Al aplicar la función tenemos:
SELECT id, DATE_FORMAT(fecha, '%d/%m/%y') AS fecha FROM mytabla;
Resultado:
    id  fecha   
------  --------
     1  21/05/03
     2  21/05/04
     3  21/05/05
     4  21/05/06
     5  21/05/07

Options: ReplyQuote


Subject Views Written By Posted
Uso de distintos FORMATOS DE FECHA 4103 Marco Antonio Rios 05/21/2007 02:12PM
Re: Uso de distintos FORMATOS DE FECHA 82721 William Chiquito 05/21/2007 09:24PM
Re: Uso de distintos FORMATOS DE FECHA 3605 Marco Antonio Rios 05/24/2007 09:43AM
Re: Uso de distintos FORMATOS DE FECHA 4032 Miguel Perez 05/24/2007 06:23AM
Re: Uso de distintos FORMATOS DE FECHA 3096 Marco Antonio Rios 05/24/2007 09:41AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.