MySql cuando almacena una fecha lo hace deacuerdo a la norma ISO 8601 esto es YYYY-mm-dd.
¿Por que MySql Almacena fecha en ese formato?
La explicación es muy amplia y no lo trataremos ahora, pero lo podemos resumir en los siguientes puntos:
– Evitar formatos ambiguos
– Tener un formato único y universal
– Poder ser organizados de más a menos significativo
– Estar en formato ordenable, incluso si tratáramos a las fechas como cadenas de texto, podríamos ordenarlas alfabéticamente.
Si ingresamos una fecha que no cumpla con ese formato, simplemente provocará un error, ya que no sera recocido como fecha válida.
¿Como podemos solucionar esto?
Mysql Contiene una función llamada GET_FORMAT con el cual podemos insertar fechas con distinto formato, solo le tenemos que indicar en que formato estamos recibiendo la fecha para que MySQL luego lo procese.
Los formatos que acepta GET_FORMAT son los siguientes
Llamada función | Resultado |
GET_FORMAT(DATE,’USA’) | ‘%m.%d.%Y’ |
GET_FORMAT(DATE,’JIS’) | ‘%Y-%m-%d’ |
GET_FORMAT(DATE,’ISO’) | ‘%Y-%m-%d’ |
GET_FORMAT(DATE,’EUR’) | ‘%d.%m.%Y’ |
GET_FORMAT(DATE,’INTERNAL’) | ‘%Y%m%d’ |
GET_FORMAT(DATETIME,’USA’) | ‘%Y-%m-%d %H.%i.%s’ |
GET_FORMAT(DATETIME,’JIS’) | ‘%Y-%m-%d %H:%i:%s’ |
GET_FORMAT(DATETIME,’ISO’) | ‘%Y-%m-%d %H:%i:%s’ |
GET_FORMAT(DATETIME,’EUR’) | ‘%Y-%m-%d %H.%i.%s’ |
GET_FORMAT(DATETIME,’INTERNAL’) | ‘%Y%m%d%H%i%s’ |
GET_FORMAT(TIME,’USA’) | ‘%h:%i:%s %p’ |
GET_FORMAT(TIME,’JIS’) | ‘%H:%i:%s’ |
GET_FORMAT(TIME,’ISO’) | ‘%H:%i:%s’ |
GET_FORMAT(TIME,’EUR’) | ‘%H.%i.%s’ |
GET_FORMAT(TIME,’INTERNAL’) | ‘%H%i%s’ |
Para demostrar el uso de esta función voy a crear una tabla:
CREATE TABLE `demo` ( `id` int(11) NOT NULL auto_increment, `fecha` date default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB
Supongamos que recibimos un fecha con el siguiente formato 15/01/2005 (dd/mm/YYYY). . Esto lo insertaremos de la siguiente manera.
INSERT INTO demo (fecha) VALUES (STR_TO_DATE(REPLACE('15/01/2005','/','.') ,GET_FORMAT(date,'EUR')))
Explicaré lo que hace la sentencia
Convertimos la cadena de texto a un formato fecha con STR_TO_DATE.
Usamos REPLACE para reemplazamos las barras por el punto (.), según nuestra tabla de formatos.
Con GET_FORMAT(date,’EUR’) le decimos al mysql que la fecha que vamos ingresar esta en formato europeo
Probemos con otra fecha, insertaremos una fecha con el siguiente formato 10.31.2003 (mm.dd.YYYY)
INSERT INTO demo (fecha) VALUES (STR_TO_DATE('10.31.2003' ,GET_FORMAT(date,'USA')))
Verificamos nuestros datos insertados, y vemos que esta en el formato estándar.
mysql: select * from demo; +----+------------+ | id | fecha | +----+------------+ | 1 | 2005-01-15 | | 2 | 2003-10-31 | +----+------------+ 2 rows in set (0.00 sec)
Espero que les sea de mucha utilidad y les evite muchos dolores de cabeza.
Hasta la próxima!
Yo uso datetime, para los registros donde guardaras fecha y hora(y eso mismo recomienda la gente de mysql).
Grande!!!
Hola buenas tardes, como puedo insertar varias fechas con horas simultáneamente en un mismo evento creado.
Por ejemplo
Evento #2
Descripción : xxxxx
Lugar: xxx
Presupuesto: xxx
Fecha
* 2/9/18 Horario 4pm a 7pm
*5/9/18 Horario 5 pm a 8 pm
*20/9/18 Horario 11am a 5 pm
Podrías definir campos diferentes de tipo fecha (date) y otros tipo hora (time).
Como puedo comparar una fecha que esta en un String como la siguiente ’02-01-2019 07:27:24′ (d-m-y H:i:s ) con otra fecha que está así: ‘2019-12-24 09:34:00’ (Y-m-d H:i:s).
Espero puedan ayudarme.
Saludos
Hola Moisés,
Pues convierte las fechas a un formato común y haz la comparación
Gracias por el post
De nada!