Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/11/2009, 07:12
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Cómo comparar con parte de un resultado??

Cita:
Resulta que no puse el campo como date puesto que no voy a trabajar con él más que para mostrarlo y buscar por mes y año(nada de buscar entre 2 fechas ni de darme una catidad de tiempo determinado).
Bueno, precisamente por esa razón es que debiste ponerlo como DATE. Es mucho más eficiente en las búsquedas y ocupa en disco mucho menos espacio que ponerlo como CHAR.

Cita:
Luego, las inserciones de fechas se realizan desde otra aplicación diferente a la que acceden los usuarios y creo que lo voy a poner tipo select para luego almacenarlo de la forma dd/mm/aaaa(el año no será select).
Enorme error. Todos los DBMS almacenan las fechas en formato "aaaa/MM/dd", y desde el punto de vista de Bytes, lo almacenan con 4 u 8 bytes (8 bytes el DATETIME).
Si lo almacenas en el formato que dices deberás usar VARCHAR o CHAR, con el consiguiente problema de conversiones.
El formato elegido internacionalmente para el almacenamiento de fechas tiene un sentido enormemente práctico. Por darte un ejemplo, es mucho más fácil hacer ordenamientos progresivos, porque al estar el año y el mes al principio, jamás se producirán alteraciones del tipo:
Cita:
01/02/2009
01/03/2009
01/04/2009

02/02/2009
05/02/2009
¿Se entiende?

Cita:
En el select del filtrado tengo como valor para cada mes por ejemplo Enero->01, Febrero->02... y así sucesivamente con todos los meses. Sólo tendría que extraer del campo que me almacena la fecha el substring correspondiente al mes para compararlo con estos valores.
Sigue siendo ineficiente, porque es más simple para el DBMS hacer:
Código sql:
Ver original
  1. SELECT *
  2. FROM tabla
  3. WHERE MONTH(fecha) = 1;

Que hacer
Código sql:
Ver original
  1. SELECT *
  2. FROM tabla
  3. WHERE MID(campofecha, 4, 2)='01';

En el primer caso tiene que extraer un número, cosa que se hace rápidamente. En el segundo, MySQL tiene que leer todas las cadenas, luego extraer la subcadena y luego hacer la comparación.
Es posible que en pruebas cortas con pocos registros no notes el problema, pero a medida que aumente la cantidad de entradas, la performance de la segunda opción se degradará, y bastante.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)