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

Problema al operar con fechas

Estas en el tema de Problema al operar con fechas en el foro de Mysql en Foros del Web. Hola muy buenas, Os cuento tengo un base de datos que guarda una serie de datos. Entre ellos uno de los campos es una fecha ...
  #1 (permalink)  
Antiguo 20/07/2014, 13:15
 
Fecha de Ingreso: agosto-2013
Ubicación: Madrid
Mensajes: 6
Antigüedad: 10 años, 8 meses
Puntos: 0
Busqueda Problema al operar con fechas

Hola muy buenas,

Os cuento tengo un base de datos que guarda una serie de datos. Entre ellos uno de los campos es una fecha y se guarda de la forma "2014-02-31". Entonces quiero hacer una consulta que me saque todas las columnas con fecha mayor que hoy pero no me sale.

He probado con:

$hoy = date('Y-d-m');
Código MySQL:
Ver original
  1. SELECT * FROM tabla WHERE fecha > '.$hoy.' AND status = 1 ORDER BY fecha ASC LIMIT 35

Pero me saca contenido con fecha 2014-04-24 siendo hoy 2014-07-20.

¿Como debería hacer este tipo de consultas?

Muchas gracias

Última edición por gnzsoloyo; 20/07/2014 a las 17:22
  #2 (permalink)  
Antiguo 20/07/2014, 15:55
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: Problema al operar con fechas

El problema es que el formato de fecha guardado es distinto al que estás queriendo buscar es decir

Tu fecha guardada es 2014-07-20
y vos estas buscando 2014-20-07
proba
Código PHP:
$hoy=date('Y-m-d'); 
Cita:
Iniciado por dorcu Ver Mensaje
Hola muy buenas,

Os cuento tengo un base de datos que guarda una serie de datos. Entre ellos uno de los campos es una fecha y se guarda de la forma "2014-02-31". Entonces quiero hacer una consulta que me saque todas las columnas con fecha mayor que hoy pero no me sale.

He probado con:

Código PHP:
$hoy date('Y-d-m');

SELECT FROM tabla WHERE fecha '.$hoy.' AND status 1 ORDER BY fecha ASC LIMIT 35 
Pero me saca contenido con fecha 2014-04-24 siendo hoy 2014-07-20.

¿Como debería hacer este tipo de consultas?

Muchas gracias
  #3 (permalink)  
Antiguo 20/07/2014, 18:18
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, 5 meses
Puntos: 2658
Respuesta: Problema al operar con fechas

Basicamente, como te lo comenta @oscurogt, es un problema de la forma en que creas la consulta.
Tu estás suponiendo que porque defines un tipo de variable de PHP como DATE, al incrustarla en la query esta tendrá el formato estándar de la base, y no es así. MySQL no entiende PHP, y por consecuencia no le llega la variable sino su conversión implícita a cadena.
El problema es que la conversión de la variable a una cadena de texto se hace según el formato del sistema, que no necesariamente es el mismo con que se creó dicha variable.
Ahora bien, tu problema se está produciendo, según supongo, por la forma en que estás creando la query, ya que aparentemente estás usando apostrofos para crear la cadena entera, pero apóstrofos y comillas no tienen el mismo uso en PHP que en MySQL.
Si no me equivoco, la query debe estas quedando construida de la siguiente forma:
Código MySQL:
Ver original
  1. SELECT * FROM tabla
  2. WHERE fecha > 2014-07-20 AND status = 1
  3. ORDER BY fecha ASC LIMIT 35
¿Por qué digo eso?

Porque lo que nos pones es así:
Cita:
'.$hoy.'
Ese tipo de encadenamiento me dice que la query la creas en PHOP con apóstrofos (') y no comillas (").
¿Es importante?
Si, es muy importante, porque MySQL para interpretar una cadena de texto como fecha debe recibirlo así:
Código MySQL:
Ver original
  1. SELECT * FROM tabla
  2. WHERE fecha > '2014-07-20' AND status = 1
  3. ORDER BY fecha ASC LIMIT 35
¿Ves cómo la fecha queda entre apóstrofos?
Bueno, cuando MySQL recibe eso en una comparación contra un campo DATE o DATETIME, hace una conversión implícita de la cadena a fecha. Pero si recibe algo como
Código MySQL:
Ver original
  1. SELECT * FROM tabla
  2. WHERE fecha > 2014-07-20 AND status = 1
  3. ORDER BY fecha ASC LIMIT 35
Lo que en realidad recibe es una comparación de un campo de fecha contra una operación aritmética de resta (2014-07-20 = 1986), y luego toma el resultado y lo convierte en fecha... lo que sería el 1986-01-10...

La solución es simple: debes convertir en la query, la fecha en una cadena de texto entendible para MYSQL como tal, que respete el formato de fecha estandar de la base.
Es decir, la query que MySQL debe recibir es la que ya te mencioné:

Código MySQL:
Ver original
  1. SELECT * FROM tabla
  2. WHERE fecha > '2014-07-20' AND status = 1
  3. ORDER BY fecha ASC LIMIT 35

¿Se entiende la idea?

No te pongo el código PHP porque programación es OFF-TOPIC en este foro, y tema a resolver en el foro de PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: bd, php, sql
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:35.