Autor
|
Tema: [mysql] Consultar mediante rango de fechas en una sola sentencias ? (Leído 32,950 veces)
|
Diabliyo
Desconectado
Mensajes: 1.441
shell# _
|
La siguiente consulta selecciona todos los registros con un valor date_col dentro de los últimos 30 días: mysql> SELECT something FROM tbl_name -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
:http://dev.mysql.com/doc/refman/5.0/es/date-and-time-functions.html Ya estuve leyendo antes eso, pero me pregunto si funcionara cuando la FECHa se guarda tomando el dato de time() ?... Porque en los ejemplos, las consultas son: year-mont-day... Y el formato de time() es un numero decimal largo !
|
|
|
En línea
|
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.336
he vuelto :)
|
Spara comenzar... el campo FECHA debe ser de tipo DATE en vez de varchar, segundo puedes sacar por año, mes o fecha actual utilizando una condicion en where (en el sql) SELECT * FROM DATOS WHERE FECHA = CURDATE()
y cuando insertas (si solon necesitas fecha, sin hora) puedes usar la misma funcion en sql, o NOW() si es por mes o año actual? SELECT * FROM DATOS WHERE YEAR(FECHA) = YEAR(CURDATE()) SELECT * FROM DATOS WHERE YEAR(FECHA) = 2011
funcionarian exactamente igual :p SELECT * FROM DATOS WHERE MONTH(FECHA) = MONTH(CURDATE()) SELECT * FROM DATOS WHERE MONTH(FECHA) = 3 ELECT * FROM DATOS WHERE MONTHNAME(FECHA) = 'March'
para marzo xD
|
|
« Última modificación: 10 Marzo 2011, 05:57 am por Nakp »
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
Diabliyo
Desconectado
Mensajes: 1.441
shell# _
|
Spara comenzar... el campo FECHA debe ser de tipo DATE en vez de varchar, segundo puedes sacar por año, mes o fecha actual utilizando una condicion en where (en el sql) SELECT * FROM DATOS WHERE FECHA = CURDATE()
y cuando insertas (si solon necesitas fecha, sin hora) puedes usar la misma funcion en sql, o NOW() si es por mes o año actual? SELECT * FROM DATOS WHERE YEAR(FECHA) = YEAR(CURDATE()) SELECT * FROM DATOS WHERE YEAR(FECHA) = 2011
funcionarian exactamente igual :p SELECT * FROM DATOS WHERE MONTH(FECHA) = MONTH(CURDATE()) SELECT * FROM DATOS WHERE MONTH(FECHA) = 3 ELECT * FROM DATOS WHERE MONTH(FECHA) = 'March'
para marzo xD Bueno vamos por partes para tomar todo bien y hacer la implementacion en mi sistema.... Actualmente cuando guardo un registro, lo hago asi: mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', '". time(). "');", $link );
Si cambio el campo FECHA VARCJAR(100) NOT NULL a FECHA DATE, tendria problemas con la forma actual de guardar mis datos ? Saludos !
|
|
|
En línea
|
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.336
he vuelto :)
|
time() es un timestamp en formato unix... cambia por mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', NOW());", $link); //o mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', CURDATE());", $link);
dependiendo si necesitas el timestamp (fecha y hora) o solo la fecha
|
|
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.336
he vuelto :)
|
La siguiente consulta selecciona todos los registros con un valor date_col dentro de los últimos 30 días: mysql> SELECT something FROM tbl_name -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
:http://dev.mysql.com/doc/refman/5.0/es/date-and-time-functions.html supon que es febrero o diciembre que tiene 31 :O
|
|
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.336
he vuelto :)
|
jeje despues de pensar un rato puedes seleccionar todas las fechas del mismo mes y año pasando el año y mes concatenados para marzo 2011 seria 201103 por lo tanto la query quedaria mas o menos asi SELECT * FROM DATOS WHERE EXTRACT(YEAR_MONTH FROM FECHA) = 201103; SELECT * FROM DATOS WHERE YEAR(FECHA) = 2011 AND MONTH(FECHA) = 3;
funcionarina exactamente igual para el mismo mes (del mismo año)
|
|
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
Diabliyo
Desconectado
Mensajes: 1.441
shell# _
|
time() es un timestamp en formato unix... cambia por mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', NOW());", $link); //o mysql_query( "inser into DATOS( ID, MENSAJE, FECHA ) values('123', 'abc', CURDATE());", $link);
dependiendo si necesitas el timestamp (fecha y hora) o solo la fecha Quiero tener en el campo FECHA la disponibilidad de Fecha y Hora, que funcion utilizo ???... NOW() o CURDATE() ?... Por cierto, la insercion (ya en la realidad) la utilizo mediante una funcion llamada insertar_bdd() pasandole 2 argumentos, el primer argumento es el nombre de la base de datos y el segun argumento es un array donde esta los campos y su valor... Como podria hacer el cambio a la forma de usar NOW() o CURDATE() ? Asi lo hago ahorita, como lo haria ahora ??? <?php "id"=>"'123'", "mensaje"=>"'abc'", "fecha"=>"'". time(). "'" ); if( !insertar_bdd( "DATOS", $trama ) ) echo 'Error...'; else echo 'Exito...'; ?>
Aprovecho para hacer otra observacion... Como actualmente todas mis fechas de las tablas que uso, las guardo usando el tiempo de unix ( time() ) y la variable FECHA es un VARCHAR(100) not NULL... Digamos que sustituyo a FECHA DATE not NULL, pero ahora como se guardaran los datos ?? Ya que actualmente cuando muestro una fecha, despues de hacer la consultar y extraer el campo de FECHA (usando mysql_fetch_array()), imprimo los datos asi: <?php $cons= consultar...... echo 'Fecha: '. date( "d/m/Y", $buf["FECHA"] ); echo '<br>Horario: '. date( "g:i a", $buf["FECHA"] ); ?>
Como seria cuando se cambie a FECHA DATE not NULL ? Cabe mencionar que quiero preguntar antes de hacer pruebas, ya que mi sistema esta ya algo cargado de datos y no quiero experimentar con este, por seguridad y porque no quiero cometer alguna torpesa y da~ar mis registros . Saludos !
|
|
|
En línea
|
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.336
he vuelto :)
|
el problema es que guardas un unix timestamp (el cual.. no es varchar, bastaria con un campo numeric o decimal en la base de datos) dependiendo que necesites guardar, en tu base de datos ese campo deberia ser DATE o DATETIME (fecha o fecha y hora) time() devuelve fecha Y hora en formato unix... pero si no usaras la hora talvez prefieras usar date("Y-m-d") para guardar solo la fecha (y el campo de tipo DATE en la base de datos) si necesitas la fecha Y hora deberias usar DATETIME en tu base de datos y date("Y-m-d H:m:s") para insertar el timestamp en la base de datos (todo esto del lado de php, las funciones comentadas anteriormente CURDATE() y NOW() son de SQL) en resumen xD tendrias que dejar de usar time() y cambiar la forma en que se guardan las fechas en la base de datos, lo cual es una buena practica tomando en cuenta que el tiempo unix empieza el 1 de enero de 1970 a las 0:00 imagina si tu sistema guardara fechas de nacimiento mi padre no podria registrarse xD
|
|
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
Diabliyo
Desconectado
Mensajes: 1.441
shell# _
|
Corrígeme si es necesario.... Entonces seria cambiar el FECHA VARCHAR(100) not NULL, a FECHA DATETIME not NULL. Despues cambiar el script asi: <?php "id"=>"'123'", "mensaje"=>"'abc'", "fecha"=>"'". date( "Y-m-d H:m:s", time()). "'" ); ?>
Ya con eso, seria convinar las funciones NOW() y CURDATE() (ambas de SQL) para las busquedas segun los lapsos que deseo !. Pero respecto ya a la practica de bsuqueda, no importa que quiera buscar en FECHA por ejemplo la fecha: 2011-01-01, asumiendo que el campo tiene el formato Y-m-d H:m:s, el MySQL excluira los valores H:m:s para hacer la busqueda con lo que concuerde con 2011-01-01 ? Saludos !
|
|
« Última modificación: 10 Marzo 2011, 21:38 pm por Diabliyo »
|
En línea
|
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.336
he vuelto :)
|
no es necesario pasar el segundo parametro a date (quita ese time()) despues para buscar por lapsos de tiempo puedes usar estoy por ultimo, si... si buscas solo con la fecha mysql obvia la hora
|
|
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Ayuda] consultar registros entre fechas
Programación Visual Basic
|
NeoXero
|
1
|
2,027
|
16 Mayo 2008, 12:01 pm
por Hans el Topo
|
|
|
Error al consultar mediante un DataGridView
.NET (C#, VB.NET, ASP)
|
Diana.Net
|
2
|
3,013
|
30 Diciembre 2011, 16:01 pm
por Diana.Net
|
|
|
Como obtener rango de fechas con JAVA
Java
|
Skarlo
|
0
|
4,127
|
17 Junio 2013, 14:59 pm
por Skarlo
|
|
|
Rango de fechas a partir del dia de la semana mysql
Bases de Datos
|
cchianalino
|
4
|
5,119
|
27 Septiembre 2018, 06:45 am
por cchianalino
|
|
|
Rango de Fechas
Programación General
|
Cayoma
|
2
|
6,389
|
1 Junio 2023, 19:42 pm
por Cayoma
|
|