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

Diferencia entre buscar por %d%m%Y y Y%m%d

Estas en el tema de Diferencia entre buscar por %d%m%Y y Y%m%d en el foro de Mysql en Foros del Web. Hola, Tengo una busqueda que es: Código: DATE_FORMAT(pe.Fecha_Inicio,'%d-%m-%Y') BETWEEN '01-09-2010' AND '04-09-2010' Y me devuelve todos los registros de la bd desde el día 1 ...
  #1 (permalink)  
Antiguo 04/09/2010, 20:03
 
Fecha de Ingreso: mayo-2006
Mensajes: 137
Antigüedad: 17 años, 11 meses
Puntos: 1
Diferencia entre buscar por %d%m%Y y Y%m%d

Hola,

Tengo una busqueda que es:
Código:
DATE_FORMAT(pe.Fecha_Inicio,'%d-%m-%Y') BETWEEN '01-09-2010' AND '04-09-2010'
Y me devuelve todos los registros de la bd desde el día 1 del 09 del ano pasado hasta el 04 del 09 del 2010, pero si la pongo asi:

Código:
DATE_FORMAT(pe.Fecha_Inicio,'%Y-%m-%d') BETWEEN '2010-09-01' AND '2010-09-04'
Si me devuelve los resultados del 2010 en el rango de fechas deseado, tengo un tipo de dato DATETIME, existe alguna regla o por que es diferente el comportamiento??


Gracias
  #2 (permalink)  
Antiguo 05/09/2010, 10:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Diferencia entre buscar por %d%m%Y y Y%m%d

Porque en general las bases de datos almacenan las fechas (y DATETIME es un campo de fecha-hora) con el formato YYYY-mm-dd o YYYY/mm/dd.
La búsqueda ha de hacerse, pues, sobre ese formato. Naturalmente, mediante programación tú puedes permitir al cliente escribir el orden que quieras y luego lanzar la búsqueda con ese orden.
En tu primera consulta pides mediante DATE_FORMAT un formato de salida que elimine la hora (en tu base sigue la fecha guardada como te digo y además se incluye la fecha hora; luego en el BETWEEN ofreces dos cadenas de texto sin formato de fecha; podrías usar el DATE_FORMAT() en las dos partes del BETWEEN, pero dado que se trata de una conversión lo mejor sería usar str_to_date(), una función creada para eso.
SELECT DATE_FORMAT(pe.Fecha_Inicio,'%d-%m-%Y') FROM tutabla WHERE Fecha_Inicio BETWEEN STR_TO_DATE('01-09-2010','%Y-%m-%d') AND STR_TO_DATE('04-09-2010',Y-%m-%d)
Como ves, una cosa es el formato de salida, y otra el formato en el que buscas.
Pero lo mejor en estos casos es usar
SELECT DATE_FORMAT(pe.Fecha_Inicio,'%Y-%m-%d') FROM tutabla WHERE pe.Fecha_inicio BETWEEN '2010-09-01' AND '2010-09-04'

Etiquetas: diferencia
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 15:04.