Documentos de Académico
Documentos de Profesional
Documentos de Cultura
#1 (permalink)
16/02/2011, 10:26
Fecha de Ingreso: diciembre-2008
google_ad Ubicación: Matehuala San Luis Postosi
_section_ Mensajes: 17
Antigüedad: 7 años, 5 meses
start(weig Puntos: 0
ht=ignore
)
don_omar
google_ad
_section_
end
google_ad_section_start Consultas entre fechas (mysql) google_ad_section_end
Bueno lo que pasa es que tengo que realizar unas consultas entre distintas fechas.
el problema esta en que los datos de la fecha se guardaron en un campo varchar y con el siguiente formato "dd/m/aaaa" ejemplo:
14/2/2011, 14 de febrero del 2011, espero me puedan hayudar, ya intente con la funcion between, mayor y menor que , pero no funciona
me trae las fechas tambien de otros años.
#2 (permalink)
16/02/2011, 10:37
Fecha de Ingreso: noviembre-2007
google_ad Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
_section_s Mensajes: 22.860
Antigüedad: 8 años, 6 meses
tart(weigh Puntos: 2575
t=ignore)
gnzsoloyo
google_ad
_section_e
nd
Moderador criollo
google_ad_section_start Respuesta: Consultas entre fechas (mysql) google_ad_section_end
google_ad_section_start
Cita:
el problema esta en que los datos de la fecha se guardaron en un campo varchar y con el siguiente formato "dd/m/aaaa" ejemplo:
14/2/2011, 14 de febrero del 2011, espero me puedan hayudar, ya intente con la funcion between, mayor y menor que , pero no funciona
me trae las fechas tambien de otros años.
Clásico problema...
Lo que debes hacer es utilizar la función de conversión de cadenas a fechas STR_TO_DATE(), usando la configuración de cadena apropiada:
Código MySQL:
Ver original
1 SELECT *
2 FROM tabla
3 WHERE fechabuscada BETWEEN STR_TO_DATE(fechadesde, '%d/%m/%Y') AND STR_TO_DATE(fechahasta, '%d/%m/%Y');
de esa forma puedes hacer que compare correctamente contra un valor dado:
Código MySQL:
Ver original
1 mysql> SELECT
2 -> (NOW() BETWEEN STR_TO_DATE('01/01/2011', '%d/%m/%Y') AND STR_TO_DATE('01/03/2011', '%d/%m/%Y')) Resultado,
3 -> STR_TO_DATE('01/01/2011', '%d/%m/%Y') DESDE,
4 -> STR_TO_DATE('01/03/2011', '%d/%m/%Y') HASTA;
5 +-----------+------------+------------+
6 | Resultado | DESDE | HASTA |
7 +-----------+------------+------------+
8 | 1 | 2011-01-01 | 2011-03-01 |
9 +-----------+------------+------------+
10 1 row in set (0.00 sec)
google_ad_section_end
__________________
google_ad_section_start(weight=ignore) ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
google_ad_section_end
#3 (permalink)
16/02/2011, 10:44
Fecha de Ingreso: enero-2011
google_ad_sectio Ubicación: <?php $persona->ubicacion('ArkangelGammar'); ?>
n_start(weight=i Mensajes: 178
Antigüedad: 5 años, 4 meses
gnore) Puntos: 19
ArkangelGammar
google_ad_sectio
n_end
google_ad_section_start Respuesta: Consultas entre fechas (mysql) google_ad_section_end
google_ad_section_start El error lo tenes en la definicion del campo. Lo tenes que definir como DATETIME y probar algo asi:
Código PHP:
$sql = "SELECT * FROM tabla
WHERE (tabla.fecha >= '$fec_ini' AND tabla.fecha <= '$fec_fin')
ORDER BY id_tabla";
En donde $fec_ini y $fec_fin yo los defini asi
Código PHP:
$fec_ini = $_POST['fecha_inicial']." 00:00:00";
$fec_fin = $_POST['fecha_final']." 23:59:59";
Aunque de todas maneras tenes un error de concepto, no tendrias que definir las fechas con un varchar, ya que la comparacion entre esos
string nunca va a ser lineal.
#4 (permalink)
16/02/2011, 11:33
google_ad Fecha de Ingreso: diciembre-2008
Ubicación: Matehuala San Luis Postosi
_section_ Mensajes: 17
Antigüedad: 7 años, 5 meses
start(weig Puntos: 0
ht=ignore
)
don_omar
google_ad
_section_
end
google_ad_section_start Respuesta: Consultas entre fechas (mysql) google_ad_section_end
google_ad_section_start Gracias a los dos amigos, pero no me funciono, mejor voy a cambiar los datos en la base de datos y luego a
cambiar el tipo de dato en el campo. como datos extra es que en la tabla ya existe bastante informacion con ese formato y al cambiar
directamente el tipo de dato en el campo de fecha me elimina la info y pone 0000-00-00, asi que resumiendo:
GRACIAS : Por gente como ustedes este es el mejor foro de la red=ustedes los mejores.
#5 (permalink)
16/02/2011, 11:43
google_ad Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
_section_s Mensajes: 22.860
Antigüedad: 8 años, 6 meses
tart(weigh Puntos: 2575
t=ignore)
gnzsoloyo
google_ad
_section_e
nd
Moderador criollo
google_ad_section_start Respuesta: Consultas entre fechas (mysql) google_ad_section_end
Haz lo siguiente:
Crea un campo de tipo DATETIME en la misma tabla:
Código MySQL:
Ver original
1 ALTER TABLE tabla ADD COLUMN fecha_nueva DATE;
Si algún campo contiene NULL o "0000-00-00", es porque en ese registro la fecha estaba mal escrita y deberás ingresarlos a mano.
Si todo va bien,
Código MySQL:
Ver original
1 ALTER TABLE tabla DROP COLUMN DROP campofechavieja;
Fijate tu mismo si lo que debe ir es DATE o DATETIME. En el segundo caso el patron del STR_TO_DATE debe ser:
Código MySQL:
Ver original
1 STR_TO_DATE(campofechavieja, '%d/%m/%Y %H');
google_ad_section_end
__________________
google_ad_section_start(weight=ignore) ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
google_ad_section_end
#6 (permalink)
16/02/2011, 13:06
google_ad Fecha de Ingreso: diciembre-2008
Ubicación: Matehuala San Luis Postosi
_section_ Mensajes: 17
Antigüedad: 7 años, 5 meses
start(weig Puntos: 0
ht=ignore
)
don_omar
google_ad
_section_
end
google_ad_section_start Respuesta: Consultas entre fechas (mysql) google_ad_section_end
google_ad_section_start ok, muchas gracias, ya ordene la informacion con un script y cambie el tipo de dato en la definicion de la tabla, sin
ningun problema.
por ultimo, para guardar una fecha sabendo que solamente se va a utilizar año-mes-dia, es mejor que el campo sea de tipo DATE o
DATETIME, que me recomiendas.
Gracias otra vez por contestar tan rapido y por compartir tus conocimientos.
----------------------------
sigo sin saber como se obtiene ese carma... tengo cero. google_ad_section_end
#7 (permalink)
17/02/2011, 04:06
google_ad Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
_section_s Mensajes: 22.860
Antigüedad: 8 años, 6 meses
tart(weigh Puntos: 2575
t=ignore)
gnzsoloyo
google_ad
_section_e
nd
Moderador criollo
google_ad_section_start Respuesta: Consultas entre fechas (mysql) google_ad_section_end
google_ad_section_start
Cita:
por ultimo, para guardar una fecha sabendo que solamente se va a utilizar año-mes-dia, es mejor que el campo sea de tipo DATE o
DATETIME, que me recomiendas.
La respuesta la puedes sacar del Manual: MySQL 5.0 Reference Manual :: 11 Tipos de columna :: 11.5 Requisitos de almacenamiento según el tipo de columna
Es un tema que defines cuando analizas la información que debes guardar: Si va a usar sólo las fechas, DATE; pero si vas a almacenar
fechas relacionadas con la fecha, es mejor no hacerlo en dos campos, puedes hacerlo en DATETIME o TIMESTAMP, dependiendo de algunos
factores.
La diferencia ente almacenar DATE o DATETIME es simple: son 3 bytes por registro contra 8 bytes. Tu eliges.
La clave para la selección de tipos de columna es simple: Nunca se pone un campo menor al máximo que se necesita, ni mayor tampoco.
google_ad_section_end
__________________
google_ad_section_start(weight=ignore) ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
google_ad_section_end
#8 (permalink)
17/02/2011, 09:29
google_ad Fecha de Ingreso: diciembre-2008
Ubicación: Matehuala San Luis Postosi
Mensajes: 17
_section_ Antigüedad: 7 años, 5 meses
start(weig Puntos: 0
ht=ignore
)
don_omar
google_ad
_section_
end
google_ad_section_start Respuesta: Consultas entre fechas (mysql) google_ad_section_end
google_ad_section_start
Cita:
#9 (permalink)
17/02/2011, 10:33
Fecha de Ingreso: noviembre-2007
google_ad Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
_section_s Mensajes: 22.860
Antigüedad: 8 años, 6 meses
tart(weigh
google_ad_section_start Respuesta: Consultas entre fechas (mysql) google_ad_section_end
google_ad_section_start Perdón, quedó mal escrito, me refería a horas relacionadas con la fecha, es decir que lo que no te conviene es usar un
campo para la fecha y otro para la hora. En ese caso es mejor un sólo DATETIME o TIMESTAMP. google_ad_section_end
__________________
google_ad_section_start(weight=ignore) ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
google_ad_section_end