MySQL - DATE_FORMAT?

 
Vista:
Imágen de perfil de miguel
Val: 10
Ha disminuido su posición en 9 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

DATE_FORMAT?

Publicado por miguel (6 intervenciones) el 04/12/2017 15:06:36
Alguien sabe como insertar con una fecha especifica (dd/mm/yyyy) lo que necesito es configurar este formato en mi base de datos pero para siempre que sea el formato para todos los campos de fecha, saben como?


Gracias a todos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

DATE_FORMAT?

Publicado por leonardo_josue (414 intervenciones) el 04/12/2017 16:45:11
Hola Miguel:

Aquí vale hacer una aclaración: en MySQL y en casi la mayoría (si no es que en todos) los manejadores de BD's, el formato para almacenar fechas sigue el formato ANSI, es decir (YYYY-MM-DD HH24:MI:SS). pero son dos cosas muy distintas cómo almacenas tus datos y como LOS PRESENTAS. La capa de presentación es independiente de la capa de almacenamiento, ¿qué quiere decir esto? que no de debes preocupar por como almacenas las fechas, sino que te ocupas de cómo presentas los datos:

Ahora bien, si tienes un cadena con el formato DD/MM/YYYY y quieres almacenarlo en un campo tipo DATE, entonces utilizas la función STR_TO_DATE:

1
2
3
4
5
6
7
mysql> SELECT STR_TO_DATE('04/12/2017', '%d/%m/%Y');
+---------------------------------------+
| STR_TO_DATE('04/12/2017', '%d/%m/%Y') |
+---------------------------------------+
| 2017-12-04                            |
+---------------------------------------+
1 row in set (0.00 sec)

Observa que el resultado de la función STR_TO_DATE pone la fecha en formato ANSI, PORQUE ASÍ ES COMO SE TIENE QUE ALMACENAR, NO PUEDES CAMBIAR LA FORMA EN CÓMO SE ALMACENA EL DATO.

Para MOSTRAR la fecha en el formato que quieras, entonces sí utilizas DATE_FORMAT:

1
2
3
4
5
6
7
mysql> SELECT NOW(), DATE_FORMAT(NOW(), '%d/%m/%Y');
+---------------------+--------------------------------+
| NOW()               | DATE_FORMAT(NOW(), '%d/%m/%Y') |
+---------------------+--------------------------------+
| 2017-12-04 09:41:13 | 04/12/2017                     |
+---------------------+--------------------------------+
1 row in set (0.06 sec)

Entonces, para insertar una fecha, lo puedes hacer de tres formas distintas:

1. Utilizando una función que te refrese una fecha en formato ANSI (como por ejemplo la función NOW):

1
2
mysql> INSERT INTO FECHAS VALUES (NOW());
Query OK, 1 row affected, 1 warning (0.14 sec)

2. Poniendo una cadena en formato ANSI (no es necesario realizar ninguna conversión)

1
2
mysql> INSERT INTO FECHAS VALUES ('2010-02-14');
Query OK, 1 row affected (0.04 sec)

3. Utilizando la función STR_TO_DATE para convertir una cadena con un formato distinto al ANSI a una fecha válida:

1
2
mysql> INSERT INTO FECHAS VALUES (STR_TO_DATE('21/12/1980', '%d/%m/%Y'));
Query OK, 1 row affected (0.02 sec)

De las tres formas se almacena correctamente la fecha INSISTO, SE ALMACENA EN FORMATO ANSI:

1
2
3
4
5
6
7
8
9
mysql> select * from fechas;
+------------+
| fecha      |
+------------+
| 2017-12-04 |
| 1980-12-21 |
| 2010-02-14 |
+------------+
3 rows in set (0.00 sec)

Para MOSTRAR las fechas en el formato que quieres, entonces utilizas DATE_FORMAT:

1
2
3
4
5
6
7
8
9
mysql> SELECT DATE_FORMAT(fecha, '%d/%m/%Y') FROM fechas;
+--------------------------------+
| DATE_FORMAT(fecha, '%d/%m/%Y') |
+--------------------------------+
| 04/12/2017                     |
| 21/12/1980                     |
| 14/02/2010                     |
+--------------------------------+
3 rows in set (0.00 sec)

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de miguel
Val: 10
Ha disminuido su posición en 9 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

DATE_FORMAT?

Publicado por miguel (6 intervenciones) el 05/12/2017 14:43:01
Hola Leonardo mira el problema es que lo que estoy haciendo es importar un archivo cvs. el cual no logro cambiar el formato de la fecha por que siempre se pierde el formato, y lo que queria era cambiar el formato de tipo de dato pero por lo que dices y lo que ya investigue no se puede! :/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

DATE_FORMAT?

Publicado por leonardo_josue (414 intervenciones) el 05/12/2017 15:35:45
Hola de nuevo Miguel:

Entonces estamos hablando de cosas muy distintas entre un problema de formato de fecha y un problema de importación de datos en CSV. Por mejores prácticas, lo que se recomienda para exportar un CSV es hacerlo en pasos, primero subes el archivo CSV a una tabla temporal que contenga sólo campos tipos VARCHAR, para evitar justamente pérdidas de información como lo mencionas y después, en un segundo momento pasas los datos de tu tabla temporal a tu tabla definitiva, haciendo las validaciones y verificaciones pertinentes.

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de miguel
Val: 10
Ha disminuido su posición en 9 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

DATE_FORMAT?

Publicado por miguel (6 intervenciones) el 05/12/2017 20:57:23
Una pregunta y exactamente como lo pasas a la tabla real? no entendi esa parte jeje
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar