Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Sobre fechas

Estas en el tema de Sobre fechas en el foro de Mysql en Foros del Web. Os cuento mi problema, estoy haciendo modificaciones en un proyecto y en la base de datos las fechas están almacenadas como varchar, y para ordenar ...
  #1 (permalink)  
Antiguo 10/03/2014, 04:49
Avatar de baldaweb  
Fecha de Ingreso: septiembre-2010
Ubicación: Barco pirata
Mensajes: 244
Antigüedad: 13 años, 7 meses
Puntos: 20
Sobre fechas

Os cuento mi problema, estoy haciendo modificaciones en un proyecto y en la base de datos las fechas están almacenadas como varchar, y para ordenar por fecha no sale bien.

El formato con el que guarda la fecha (como varchar) es: 20/05/2013

Y me gustaría convertir esa fecha a date en la consulta para que ordene bien, es decir, el formato correcto sería: 2013-05-20

Gracias.
  #2 (permalink)  
Antiguo 10/03/2014, 05:07
Avatar de baldaweb  
Fecha de Ingreso: septiembre-2010
Ubicación: Barco pirata
Mensajes: 244
Antigüedad: 13 años, 7 meses
Puntos: 20
Respuesta: Sobre fechas

Solucionado:

en order by tengo que poner:

STR_TO_DATE( fecha_venta, '%d/%m/%Y' ) asc
  #3 (permalink)  
Antiguo 10/03/2014, 05:48
 
Fecha de Ingreso: diciembre-2005
Mensajes: 65
Antigüedad: 18 años, 4 meses
Puntos: 4
Respuesta: Sobre fechas

Una fecha es una fecha, no es un campo de texto . Cambia la tabla y añade una columna de tipo fecha y convierte las cadenas de texto a fecha y almacénalas en esa columna, luego borra la columna vieja.
  #4 (permalink)  
Antiguo 10/03/2014, 06:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Sobre fechas

Cita:
Iniciado por baldaweb Ver Mensaje
Solucionado:

en order by tengo que poner:

STR_TO_DATE( fecha_venta, '%d/%m/%Y' ) asc
Eso no es una solución, disculpa que te lo diga. Es un parche.
Va a funcionar, si, pero generará una baja de performance que se irá notando más y más a medida que aumenten los datos, o en la medida que necesites más consultas con la fecha como componente.
Es preferible resolver el problema desde el principio, y listo.

Para solucioanrlo lo más simple es primero hacer un ajuste del contenido de las fechas:
Código MySQL:
Ver original
  1. UPDATE ventas
  2. SET fecha_venta = DATE_FORMAT(STR_TO_DATE( fecha_venta,  '%d/%m/%Y' ) , '%Y-%m-%d');

y luego corregir ell tipo de columna:
Código MySQL:
Ver original
  1. ALTER TABLE ventas MODIFY COLUMN fecha_venta fecha_venta DATE;

Nota: Antes de hacer esto, haz una copia dfe la tabla con todo su contenido y realiza la prueba en la copia.
Y aún así, antes de implementarlo, realiza un backup completo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 10/03/2014, 10:29
Avatar de baldaweb  
Fecha de Ingreso: septiembre-2010
Ubicación: Barco pirata
Mensajes: 244
Antigüedad: 13 años, 7 meses
Puntos: 20
Respuesta: Sobre fechas

Lo ideal es lo que dice gnzsoloyo, pero el programador anterior lo hizo así y esa base de datos está integrada en un CRM donde habría que cambiar el código de varios archivos que usan ese campo de la base de datos.

Lo que quería era STR_TO_DATE( fecha_venta, '%d/%m/%Y' ) asc, ahora bien, si el jefe pide cambiar la base de datos se hará lo otro.

Saludos y gracias.
  #6 (permalink)  
Antiguo 10/03/2014, 10:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Sobre fechas

Cita:
pero el programador anterior lo hizo así y esa base de datos está integrada en un CRM donde habría que cambiar el código de varios archivos que usan ese campo de la base de datos.
Sin ofender, hay veces que pienso que los programadores muchas veces deberían tener prohibido diseñar bases de datos...
:
Aunque las peores pesadillas que he tenido han sido por bases diseñadas por ingenieros en electrónica.
Esos SI que no entienden de datos...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 10/03/2014, 10:51
 
Fecha de Ingreso: diciembre-2005
Mensajes: 65
Antigüedad: 18 años, 4 meses
Puntos: 4
Respuesta: Sobre fechas

Es que almacenar fechas en la BD como un campo de texto...

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:40.